2016-11-23 3 views
0

Ich versuche, konvertieren Hql-Skript in Pyspark. Ich kämpfe, wie man die Summe der Groß- und Kleinschreibung bei Aussagen in der Aggregation nach groupby-Klausel erreicht. z.B.Summe der Fall, wenn in pyspark

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

Ist es möglich, in pyspark? Ich erhalte einen Fehler bei der Ausführung einer solchen Anweisung. Danke

Antwort

1

Sie können mitColumn eine Spalte mit den Werten erstellen, die summiert werden sollen, und dann aggregieren. Zum Beispiel:

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) 

, die dieses Ergebnis ausdruckt:

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

Vielen Dank !! withColumn hat mir geholfen und bin jetzt in der Lage, die Summe zu erfüllen .. :) – Renu