用另一个列的最大值创建一个新列

时间:2019-12-05 16:42:31

标签: apache-spark

我有一个名为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)) 

但是我不想执行火花操作。该怎么办?

1 个答案:

答案 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()