агрегатная функция в lit () pyspark вместе с withColumn - PullRequest
0 голосов
/ 27 марта 2020

У меня есть количество столбцов в кадре данных. Я хочу добавить новый столбец к этому фрейму данных с каждой записью, имеющей min("Quantity"). Я пытаюсь использовать lit() в pyspark. что-то вроде ниже

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().

Но вместо 2 здесь я хочу min(Quantity). Я что-то упустил?

1 Ответ

1 голос
/ 27 марта 2020

Пожалуйста, попробуйте использовать оконную функцию, так как функция 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|
+---------+----+--------+---------+
...