pyspark 的 lit() 中的聚合函数以及 withColumn

aggregate function in lit() of pyspark along with withColumn

我在数据框中有列数量。我想向此数据框添加一个新列,每条记录都有 min("Quantity")。我正在尝试在 pyspark 中使用 lit()。类似下面

df.withColumn("min_quant", lit(min(col("Quantity")))).show().

导致低于错误

grouping expressions sequence is empty, and `InvoiceNo` is not an aggregate function. 
Wrap (min(`Quantity`) AS `min_quant`) in windowing function(s) or wrap 

这是有效的:

df.withColumn("min_quant", lit(2)).show().

但是,我想要 min(Quantity) 代替这里的 2。我错过了什么吗?

请尝试使用 window 函数,因为 min() 函数需要聚合。

val windowSpec = Window.orderBy("InvoiceNo")

df.withColumn("min_quant", min("Quantity") over(windowSpec)).show() 

示例结果:

+---------+----+--------+---------+
|InvoiceNo|name|Quantity|min_quant|
+---------+----+--------+---------+
|        1| ABC|      19|        1|
|        1| ABC|       1|        1|
|        1| ABC|       8|        1|
|        1| ABC|     389|        1|
|        1| ABC|     196|        1|
|        2| CBD|      10|        1|
|        2| CBD|     946|        1|
|        3| XYZ|       3|        1|
+---------+----+--------+---------+