Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 使用另一列的最大值创建新列_Apache Spark - Fatal编程技术网

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(“开始日期”)
works
finalDF
是否为非
日期表的任意数据帧。我尝试了
.withColumn(“NEW\u COLUMN”,datesDF.select(functions.max(“start\u date”))
,但它抛出了一个错误finaldf已经是一个定义的数据帧。我需要在
datesDF
中添加一个新列
max(“开始日期”)
对不起,我想我表达得不够好。。finalDF根本不包含
start\u date
列或任何类似列。它仅出现在
datesDF
我想从
datesDF
添加为
finalDF
的新列的最大(“开始日期”)中