【发布时间】:2018-08-27 16:38:22
【问题描述】:
我有一个带有 ID 和一堆数字列的 Spark DataFrame,对于除 ID 之外的每一列,我正在尝试生成一列按 ID 分组的滞后差异。
例如,如果我有这个DataFrame
+---+-----+-----+-----+
| ID| var1| var2| var3|
+---+-----+-----+-----+
| 1| 1| 3| 2|
| 1| 2| 4| 2|
| 1| 3| 1| 3|
| 2| 1| 3| 4|
| 2| 1| 2| 1|
| 2| 1| 1| 1|
| 2| 3| 3| 1|
| 3| -1| 0| 0|
| 3| 2| -1| 2|
| 3| 0| 4| 0|
+---+-----+-----+-----+
我希望输出是这样的:
+---+-----+-----+-----+----------+----------+----------+
| ID| var1| var2| var3| var1_diff| var2_diff| var3_diff|
+---+-----+-----+-----+----------+----------+----------+
| 1| 1| 3| 2| null| null| null|
| 1| 2| 4| 2| 1| 1| 0|
| 1| 3| 1| 3| 1| -3| 1|
| 2| 1| 3| 4| null| null| null|
| 2| 1| 2| 1| 0| -1| -3|
| 2| 1| 1| 1| 0| -1| 0|
| 2| 3| 3| 1| 2| 2| 0|
| 3| -1| 0| 0| null| null| null|
| 3| 2| -1| 2| 3| -1| 2|
| 3| 0| 4| 0| -2| 3| -2|
+---+-----+-----+-----+----------+----------+----------+
_diff 列是减去滞后的原始列。我的DataFrame 有超过 3 个变量,所以我希望能够为任意多的列生成滞后差异。即我不想一一创建_diff 列。
关于如何实现这一目标的任何想法?
【问题讨论】:
标签: scala apache-spark apache-spark-sql