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|
+---------+----+--------+---------+
我在数据框中有列数量。我想向此数据框添加一个新列,每条记录都有 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|
+---------+----+--------+---------+