Spark Java API中两行之间的差异

Spark Java API中两行之间的差异,java,scala,apache-spark,Java,Scala,Apache Spark,我有一个Spark数据集: +----------+-----+----+ | Date|Value|Name| +----------+-----+----+ |2013-02-08|14.75| AAL| |2013-02-11|14.46| AAL| |2013-02-12|19.27| AAL| |2013-02-11|13.66| FIN| |2013-02-12|16.99| FIN| +----------+-----+----+ 我想计算随后几天的差额如下: +---

我有一个Spark数据集:

+----------+-----+----+
|      Date|Value|Name|
+----------+-----+----+
|2013-02-08|14.75| AAL|
|2013-02-11|14.46| AAL|
|2013-02-12|19.27| AAL|
|2013-02-11|13.66| FIN|
|2013-02-12|16.99| FIN|
+----------+-----+----+
我想计算随后几天的差额如下:

+----------+-----+----+
|      Date| Diff|Name|
+----------+-----+----+
|2013-02-11| 0.29| AAL|
|2013-02-12| 4.81| AAL|
|2013-02-12| 3.33| FIN|
+----------+-----+----+
正如前面提到的,我认为在Scala中是可以实现的。在Java中有这样做的方法吗

我尝试过类似的路线,但对我来说没有什么意义:

WindowSpec windowSpec = Window.partitionBy("Name").orderBy("Date");

modifiedDF = modifiedDF.withColumn("Diff", df.col("Value") - when((lag("Value", 1).over(windowSpec)).isNull(), 0).otherwise(lag("Value", 1).over(windowSpec)))
        .show(false);
Java抱怨减法运算符不能应用于“
org.apache.spark.sql.Column
”类型

但是,我确实看到了在
org.apache.spark.sql.functions
中实现的
.divide()
方法,因此,以下方法可以很好地工作:

modifiedDF = modifiedDF.withColumn("Diff", modifiedDF.col("Value").divide(when((lag("Value", 1).over(windowSpec)).isNull(), 0).otherwise(lag("Value", 1).over(windowSpec))));
我有两个问题:

1) 这是正确的做法吗

2) 如果是,为什么在
org.apache.spark.sql.functions中没有.subtract实现

我要找的
.subtract()
函数名为
.减号()


希望这对别人有帮助

还有另一种定义滞后的方法:滞后(“列”、滞后值、默认值)。在本例中,您不需要when()和otherwise()。
modifiedDF = modifiedDF.withColumn("Diff",
                modifiedDF.col("Value")
                        .minus(when((lag("Value", 1).over(windowSpec)).isNull(), 0)
                                .otherwise(lag("Value", 1).over(windowSpec))));