为了账号安全,请及时绑定邮箱和手机立即绑定

Spark Java API中两行之间的差异

Spark Java API中两行之间的差异

手掌心 2021-05-13 14:11:13
我有一个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
查看完整描述

1 回答

?
FFIVE

TA贡献1797条经验 获得超6个赞

.subtract()我一直在寻找的功能被命名为.minus()


modifiedDF = modifiedDF.withColumn("Diff",

                modifiedDF.col("Value")

                        .minus(when((lag("Value", 1).over(windowSpec)).isNull(), 0)

                                .otherwise(lag("Value", 1).over(windowSpec))));

希望这对某人有帮助!


查看完整回答
反对 回复 2021-05-19
  • 1 回答
  • 0 关注
  • 189 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信