Как добавить постоянный столбец с максимальным значением в фрейм данных pyspark без группировки по - PullRequest
0 голосов
/ 03 октября 2019

Предположим, что у нас есть фрейм данных PySpark с двумя столбцами, ID (он уникален) и VALUE.

Мне нужно добавить третий столбец, который всегда содержит одно и то же значение, то есть максимальное значение столбца VALUE. Я заметил, что в этом случае не имеет никакого смысла группировать по идентификатору, потому что мне нужен глобальный максимум.

Это звучит очень просто и, вероятно, так и есть, но я видел только решения, включающие группировку, которые делаютне подходит для моего случая. Я много чего перепробовал, но ничего не получалось.

Мне нужно решение только в PySpark / Python Code. Большое спасибо!

Ответы [ 2 ]

2 голосов
/ 03 октября 2019

Вы можете сделать это:

from pyspark.sql.functions import max, lit
# compute max value from VALUE column
max_df = df.select(max(df['VALUE'])).collect()
# max_df is a 1 row 1 column dataframe, you need to extract the value
max_val = max_df[0][0]
# create new column in df, you need lit as you have a constant value
df = df.withColumn('newcol',lit(max_val))
0 голосов
/ 03 октября 2019

В вашем случае вы можете использовать оконные функции. И я предполагаю, что ваш столбец значений содержит список значений.

from pyspark.sql.functions import max,desc

from pyspark.sql.window import Window

spec= Window.partitionBy('ID').orderBy(desc('VALUE'))

newDF = df.withColumn('maxValue',max('VALUE').over(spec))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...