Как обновить одну ячейку фрейма данных Scala?

#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 |
 ---- ------ ---