Сумма по другому столбцу, возвращающему «col должно быть ошибкой столбца» - PullRequest
0 голосов
/ 19 декабря 2018

Я пытаюсь добавить новый столбец, в котором он показывает сумму двойных (столбец вещи для суммирования) на основе соответствующего идентификатора в столбце идентификатора.однако в настоящее время выдается сообщение об ошибке «col должно быть столбцом»

df = df.withColumn('sum_column', (df.groupBy('id').agg({'thing_to_sum': 'sum'})))

Пример набора данных:

| id | thing_to_sum | sum_column |
|----|--------------|------------
| 1  | 5            | 7          |
| 1  | 2            | 7          |
| 2  | 4            | 4          |

Любая помощь по этому вопросу будет принята с благодарностью.

Также будет приветствоваться любая ссылка на наиболее эффективный способ сделать это.

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Вы можете зарегистрировать любую DataFrame как временную таблицу, чтобы запросить ее через SQLContext.sql.

myValues = [(1,5),(1,2),(2,4),(2,3),(2,1)]
df = sqlContext.createDataFrame(myValues,['id','thing_to_sum'])
df.show()
+---+------------+
| id|thing_to_sum|
+---+------------+
|  1|           5|
|  1|           2|
|  2|           4|
|  2|           3|
|  2|           1|
+---+------------+
df.registerTempTable('table_view')
df1=sqlContext.sql(
    'select id, thing_to_sum, sum(thing_to_sum) over (partition by id) as sum_column from table_view'
)
df1.show()
+---+------------+----------+
| id|thing_to_sum|sum_column|
+---+------------+----------+
|  1|           5|         7|
|  1|           2|         7|
|  2|           4|         8|
|  2|           3|         8|
|  2|           1|         8|
+---+------------+----------+
0 голосов
/ 19 декабря 2018

Думаю, я нашел решение своего вопроса, но совет все равно будет оценен:

sum_calc = F.sum(df.thing_to_sum).over(Window.partitionBy("id"))
df = df.withColumn("sum_column", sum_calc)
...