Допустим, у меня есть следующий фрейм данных:
val df = spark.sparkContext.parallelize(Seq(
("A", "12", 50),
("A", "13", 100),
("A", "14", 30),
("B", "15", 40),
("C", "16", 60),
("C", "17", 70)
)).toDF("Name", "Time", "Value")
, и я поворачиваюсь по времени:
val pivoted = df.groupBy($"Name").
pivot("Time").
agg(coalesce(sum($"Value"),lit(0)))
pivoted.show()
, что приводит к:
+----+----+----+----+----+----+----+
|Name| 12| 13| 14| 15| 16| 17|
+----+----+----+----+----+----+----+
| B|null|null|null| 40|null|null|
| C|null|null|null|null| 60| 70|
| A| 50| 100| 30|null|null|null|
+----+----+----+----+----+----+----+
До этого все в порядке.То, что я хочу, это добавить столбец рядом с «столбцом 17», вычисляя сумму каждой строки.Таким образом, ожидаемый результат должен быть:
+----+----+----+----+----+----+----+----+
|Name| 12| 13| 14| 15| 16| 17|sum |
+----+----+----+----+----+----+----+----+
| B|null|null|null| 40|null|null|40 |
| C|null|null|null|null| 60| 70|130 |
| A| 50| 100| 30|null|null|null|180 |
+----+----+----+----+----+----+----+----+
(Благородно,) Я попытался добавить 'withColumn', но это не удалось:
val pivotedWithSummation = df.groupBy($"Name").
pivot("Time").
agg(coalesce(sum($"Value"),lit(0))).
withColumn("summation", sum($"Value"))
Я пришел с этим ответ , но я не смог его применить: /
Я использую Scala v.2.11.8 и Spark 2.3.1
Заранее спасибо!