在pyspark的情况总和

时间:2016-11-23 10:37:59

标签: pyspark aggregate

我正在尝试将hql脚本转换为pyspark。我正在努力如何在groupby子句之后的聚合语句中实现大小写的总和。例如

dataframe1 = dataframe0.groupby(col0).agg(
            SUM(f.when((col1 == 'ABC' | col2 == 'XYZ'), 1).otherwise(0)))

在pyspark有可能吗? 我在执行这样的声明时遇到错误。 感谢

1 个答案:

答案 0 :(得分:1)

您可以使用withColumn创建一个包含您想要求和的值的列,然后对其进行聚合。例如:

from pyspark.sql import functions as F, types as T

schema = T.StructType([
    T.StructField('key', T.IntegerType(), True),
    T.StructField('col1', T.StringType(), True),
    T.StructField('col2', T.StringType(), True)
])

data = [
    (1, 'ABC', 'DEF'),
    (1, 'DEF', 'XYZ'),
    (1, 'DEF', 'GHI')
]

rdd = sc.parallelize(data)
df = sqlContext.createDataFrame(rdd, schema)



result = df.withColumn('value', F.when((df.col1 == 'ABC') | (df.col2 == 'XYZ'), 1).otherwise(0)) \
           .groupBy('key') \
              .agg(F.sum('value').alias('sum'))

result.show(100, False)

打印出这个结果:

+---+---+
|key|sum|
+---+---+
|1  |2  |
+---+---+