Apache spark 使用另一列的最大值创建新列
我有一个名为Apache spark 使用另一列的最大值创建新列,apache-spark,Apache Spark,我有一个名为dates的数据框,其中包含start\u date列。我想取start\u date的最大值,并将其作为列添加到我的新数据框中。我不想为此使用任何spark操作(因此没有collectAsList并获得那样的值) 我知道我能做到 //DatesDF generated by Select Min(start_date) from dates String minDateValueLiteral = datesDF.as(Encoders.STRING()).collectAsLis
dates
的数据框,其中包含start\u date
列。我想取start\u date
的最大值,并将其作为列添加到我的新数据框中。我不想为此使用任何spark操作(因此没有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))
但我不想做刺激动作。如何做到这一点?使用窗口功能
max
:
finalDF.withColumn("NEW_COLUMN", max("start_date").over()).show()
编辑
如果日期在另一个名为datesDF
的数据框中,您可以首先聚合最大日期,然后将结果DF与finalDF
交叉连接,如下所示:
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()
检查
df.select(col(“开始日期”)、..、max(“开始日期”)
worksfinalDF
是否为非日期表的任意数据帧。我尝试了.withColumn(“NEW\u COLUMN”,datesDF.select(functions.max(“start\u date”))
,但它抛出了一个错误finaldf已经是一个定义的数据帧。我需要在datesDF
中添加一个新列max(“开始日期”)
对不起,我想我表达得不够好。。finalDF根本不包含start\u date
列或任何类似列。它仅出现在datesDF
我想从datesDF
添加为finalDF
的新列的最大(“开始日期”)中