0

Ich arbeite an der Erstellung einiger analytische Datensätze mit Spark und DataSet-API. Ich habe zu einem Teil, wo ich einige Variablen bin calcuating und es sieht etwa so aus:Spark-Datensatz agg-Methode

CntDstCdrs1.groupByKey(x => (x.bs_recordid, x.bs_utcdate)).agg(
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_1" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_1day"), 
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_3" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_3day_cust"), 
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_5" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_5day_cust"), 
    count(when(($"bc_sub_org_id" === lit(500) && $"bc_utcdate" >= $"day_7" && $"bc_utcdate" <= $"bs_utcdate") , $"bc_phonenum")).as[Long].name("count_phone_7day_cust") 
).show() 

Dieser Code funktioniert gut, aber wenn ich versuche, eine weitere Zählung für Variable „count_phone_30day“ Ich habe einen Fehler bekommen hinzuzufügen .. "method overloaded ..." Das bedeutet, dass die agg-Methodensignatur auf dataSet maximal 4 Spaltenausdrücke akzeptiert. Wie auch immer, wenn dieser Ansatz keine optimale Methode zur Berechnung einer großen Anzahl von Variablen ist, welche wäre dann? Ich habe zählen, zählen verschiedene, Summe usw. Variablen.

KR, Stefan

+1

Die 'Methode overloaded' Fehler wahrscheinlich durch etwas anderes verursacht wird, wie' 'agg' auf Dataset' kann mehr nehmen Art und Weise als 4 Aggregatfunktionen über 'wann'-Bedingungen. –

+0

@LeoC kann es, aber in relationalen 'groupBy', der Schlüssel-Wert' groupByKey' hat andere Implementierung –

Antwort

1

Dataset.groupByKey kehrt KeyValueGroupedDataset.

Diese Klasse hat keine agg mit varargs - nur 4 Spalten als Argumente liefern kann