#scala #apache-spark
#scala #apache-spark
Вопрос:
Вот пример фрейма данных:
var df = Seq(("Bob","Male","20"),("Jenn","Female","25")).toDF("Name","Gender","Age")
Я хочу изменить столбец «Возраст» строки, где «Имя» равно «Bob» на 30.
var name_to_change = "Bob"
var new_age = 30
Как бы я поступил по этому поводу?
Ответ №1:
В spark вы не можете обновить ни одной ячейки. Что вы можете сделать, это обновить столбец. Но, используя условие, вы можете делать то, что хотите.
df.withColumn("Age", when(col("Name") === name_to_change, lit(new_age)).otherwise(col("Age")))
Ответ №2:
Вы также можете использовать условные функции Hive и аналогично операторам IF на других языках программирования
IF(boolean testCondition, T valueTrue, T valueFalseOrNull)
внутренняя expr(expr: String)
функция.
scala> df.show(false)
---- ------ ---
|Name|Gender|Age|
---- ------ ---
|Bob |Male |20 |
|Jenn|Female|25 |
---- ------ ---
scala> df
.withColumn("Age",expr("if((Name ='Bob'),30,Age)"))
.show(false)
---- ------ ---
|Name|Gender|Age|
---- ------ ---
|Bob |Male |30 |
|Jenn|Female|25 |
---- ------ ---