PySpark 1.5 Groupby Sum为Dataframe中的新列

时间:2016-03-07 16:45:50

标签: python sql apache-spark pyspark apache-spark-sql

我正在尝试使用groupBy和sum(使用PySpark 1.5)在Spark Dataframe中创建一个新列(“newaggCol”)。我的数字列已经转换为Long或Double。用于形成groupBy的列是String和Timestamp。我的代码如下

df= df.withColumn("newaggCol",(df.groupBy([df.strCol,df.tsCol]).sum(df.longCol)))

我的错误回溯就是这一行。并说明:

ValueError: Cannot convert column into bool: please use '&' for 'and',     '|' for 'or', '~' for 'not' when building DataFrame boolean expressions.

我觉得我必须错误地调用这些函数?

1 个答案:

答案 0 :(得分:3)

使用SQL聚合是不可能的,但您可以使用窗口函数轻松获得所需的结果

import sys
from pyspark.sql.window import Window
from pyspark.sql.functions import sum as sum_

w = (Window()
    .partitionBy(df.strCol, df.tsCol)
    .rowsBetween(-sys.maxsize, sys.maxsize))

df.withColumn("newaggCol", sum_(df.longCol).over(w))