Pyspark 对另一列求和,返回';col应为column error';

Pyspark 对另一列求和,返回';col应为column error';,pyspark,pyspark-sql,Pyspark,Pyspark Sql,我试图添加一个新列,其中根据ID列中的相应ID显示double(things to sum列)的和。但是,此操作当前引发“列应为列错误” df = df.withColumn('sum_column', (df.groupBy('id').agg({'thing_to_sum': 'sum'}))) 示例数据集: | id | thing | u to | u sum | sum |列| |----|--------------|------------ | 1 | 5

我试图添加一个新列,其中根据ID列中的相应ID显示double(things to sum列)的和。但是,此操作当前引发“列应为列错误”

df = df.withColumn('sum_column', (df.groupBy('id').agg({'thing_to_sum': 'sum'})))
示例数据集:

| id | thing | u to | u sum | sum |列|
|----|--------------|------------
| 1  | 5            | 7          |
| 1  | 2            | 7          |

|2 | 4 | 4 |
我想我找到了解决我自己问题的方法,但仍希望您提供建议:

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

您可以将任何
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|
+---+------------+----------+

谢谢你的回复!很荣幸,先生:)