如何在Scala Spark中使用窗口延迟来发现变化
我的数据集如下所示:如何在Scala Spark中使用窗口延迟来发现变化,scala,apache-spark,Scala,Apache Spark,我的数据集如下所示: +----+------+ |day | count| +----+------+ | 1| 50| | 2| 55| | 3| 53| +----+------+ +----+------+-------+ |day | count| delta | +----+------+-------+ | 1| 50| 0| | 2| 55| 5| | 3| 53| -2| +----+--
+----+------+
|day | count|
+----+------+
| 1| 50|
| 2| 55|
| 3| 53|
+----+------+
+----+------+-------+
|day | count| delta |
+----+------+-------+
| 1| 50| 0|
| 2| 55| 5|
| 3| 53| -2|
+----+------+-------+
我想要一张这样的桌子:
+----+------+
|day | count|
+----+------+
| 1| 50|
| 2| 55|
| 3| 53|
+----+------+
+----+------+-------+
|day | count| delta |
+----+------+-------+
| 1| 50| 0|
| 2| 55| 5|
| 3| 53| -2|
+----+------+-------+
我对Scala非常陌生,这就是我正在尝试的,但这是错误的。我的上一次计数为空
myDf.withColumn("prev_count", lag("count", 1)
.over(Window.partitionBy("day")
.orderBy("day"))).show()
val result = myDf.withColumn("change",
(myDf("count") - myDf("prev_count"))).show()
非常感谢指针。看起来您没有使用新列:
val withPrevcount = myDf.withColumn("prev_count", lag("count", 1).over(Window.partitionBy("day").orderBy("day")))
val result = withPrevcount.withColumn("change", col("count") - col("prev_count")))
result.show()
你是对的,我没有使用新的专栏,但是我仍然没有在“prev_count”专栏中得到任何东西。运行第一行后为空:“val withPrevcount=myDf.withColumn(“prev_count”),lag(“count”,1)。over(Window.partitionBy(“day”)。orderBy(“day”))”@b-ryce我想应该是col(“count”)-col(“prev_count”)
——检查这是否解决了您的问题。如果没有,那么就针对您的新问题提出一个新问题可能是个好主意:我对spark的了解还不够,除了基础知识之外,无法进行调试。