我有一个名为dates
的数据帧,其列为start_date
。我想取start_date
的最大值并将其作为一列添加到我的新数据框中。我不想为此使用任何火花操作(因此,没有collectAsList并获得那样的值)。
我知道我能做到
//DatesDF generated by Select Min(start_date) from dates
String minDateValueLiteral = datesDF.as(Encoders.STRING()).collectAsList().get(0);
finalDF = finalDF.withColumn("NEW_COLUMN", functions.lit(minDateValueLiteral))
但是我不想执行火花操作。该怎么办?
答案 0 :(得分:0)
使用窗口功能max
:
finalDF.withColumn("NEW_COLUMN", max("start_date").over()).show()
编辑
如果日期位于另一个名为datesDF
的数据帧中,则可以首先汇总最大日期,然后将finalDF
与结果DF交叉连接,如下所示:
import spark.implicits._
val finalDF = Seq((1, "A"),
(2, "B"),
(3, "C"),
(4, "D"),
(5, "E")
).toDF("id", "name")
val datesDF = Seq(("2019-12-05"),
("2019-12-04"),
("2019-12-03"),
("2019-12-02"),
("2019-12-01")
).toDF("start_date")
val maxDateDF = datesDF.agg(max("start_date").alias("start_date"))
finalDF.crossJoin(maxDateDF).show()