我有一个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”类型。
但是,我确实看到了.divide()实现的方法org.apache.spark.sql.functions,因此,以下工作正常:
modifiedDF = modifiedDF.withColumn("Diff", modifiedDF.col("Value").divide(when((lag("Value", 1).over(windowSpec)).isNull(), 0).otherwise(lag("Value", 1).over(windowSpec))));
我有两个问题:
1)这是正确的方法吗?
2)如果是,为什么在.subtract中没有实现 org.apache.spark.sql.functions
FFIVE
相关分类