2016-11-23 60 views
0

我想將hql腳本轉換爲pyspark。在groupby子句之後,我正在努力如何實現聚合語句的聚合。例如。在pyspark的情況下的總和

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

它可能在pyspark? 我在執行此類語句時出錯。 謝謝

回答

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 | 
+---+---+ 
+0

非常感謝! withColumn幫助了我,並且能夠現在執行總和.. :) – Renu

相關問題