Я пытаюсь создать столбец суммы, беря сумму значений строк набора столбцов в кадре данных.Поэтому я использовал следующий метод:
val temp_data = spark.createDataFrame(Seq(
(1, 5),
(2, 4),
(3, 7),
(4, 6)
)).toDF("A", "B")
val cols = List(col("A"), col("B"))
temp_data.withColumn("sum", cols.reduce(_ + _)).show
+---+---+---+
| A| B|sum|
+---+---+---+
| 1| 5| 6|
| 2| 4| 6|
| 3| 7| 10|
| 4| 6| 10|
+---+---+---+
Таким образом, этот метод работает нормально и дает ожидаемый результат.Однако я хочу создать переменную cols без явного указания имен столбцов.Поэтому я использовал typedLit следующим образом.
val cols2 = temp_data.columns.map(x=>typedLit(x)).toList
, когда я смотрю на cols
и cols2
, они выглядят одинаково.
cols: List[org.apache.spark.sql.Column] = List(A, B)
cols2: List[org.apache.spark.sql.Column] = List(A, B)
Однако, когда я использую cols2
чтобы создать мой столбец суммы, он не работает так, как я ожидаю.
temp_data.withColumn("sum", cols2.reduce(_ + _)).show
+---+---+----+
| A| B| sum|
+---+---+----+
| 1| 5|null|
| 2| 4|null|
| 3| 7|null|
| 4| 6|null|
+---+---+----+
Кто-нибудь знает, что я здесь делаю неправильно?Почему второй метод не работает так же, как первый?