2017-09-30 3 views
0

Ich möchte die Anzahl der Kunden basierend auf alle Kombination von Spalten, die ich in Dataframe habe.Aggregation auf mehrere Spalten in Spark Dataframe (alle Kombination)

Für zB: - Angenommen, ich habe Datenrahmen mit 5 Spalten.

id, col1, col2, col3, cust_id

Ich brauche die Anzahl der Kunden für alle Kombination:

id, col1, count(cust_id) 
    id, col1, col2, count(cust_id) 
    id, col1, col3, count(cust_id) 
    id, col1, col2, col3, count(cust_id) 
    id, col2, count(cust_id) 
    id, col2, col3, count(cust_id) 

Und so weiter für alle Permutation und Kombination.

Es ist sehr schwierig, es separat zu tun Bereitstellung aller verschiedenen Kombination zu GroupBy Funktion von Datenrahmen und dann aggregieren die Anzahl der Kunden.

Gibt es eine Möglichkeit, dies zu erreichen und dann das gesamte Ergebnis zu kombinieren, um es in einem Datenrahmen hinzuzufügen, damit wir das Ergebnis in eine Ausgabedatei schreiben können.

für mich sieht es etwas komplex aus, wirklich zu schätzen, wenn jemand irgendeine Lösung bieten kann. Bitte lassen Sie mich wissen, wenn weitere Details erforderlich sind.

Vielen Dank.

+0

Danke Raul, schätze Sie helfen. Versuchen Sie dies und lassen Sie es wissen –

+0

Hallo Raul, ist es möglich, Satz von col in Cube-Funktion so etwas wie (col1, col2), (col3, col4) als zwei in CUBE setzen –

Antwort

1

Es ist möglich, and it is called cube:

df.cube("id", "col1", "col2", "col3").agg(count("cust_id")) 
    .na.drop(minNonNulls=3) // To exclude some combinations 

SQL-Version bietet auch eine GROUPING SET, die als .na.drop effizienter sein können.

+0

Hallo Raul, ist es möglich, Set geben von col in cube funktioniert so etwas wie (col1, col2), (col3, col4) wie zwei in CUBE gesetzt –

Verwandte Themen