2016-04-04 7 views
1

nimmt diese meine CSV-Datei ist:Spark-Karte mit Bedingung reduzieren

attr1;attr2 
11111;MOC 
22222;MTC 
11111;MOC 
22222;MOC 
33333;MMS 

Ich mag die Anzahl der Vorkommen in der ersten Spalte, wenn attr2 = MOC haben. Wie folgt aus:

(11111,2) 
(22222,1) 

ich versucht habe:

val sc = new SparkContext(conf) 
val textFile = sc.textFile(args(0)) 

val data = textFile.map(line => line.split(";").map(elem => elem.trim)) 
val header = new SimpleCSVHeader(data.take(1)(0)) 

val rows = data.filter(line => header(line,"attr1") != "attr1") 
val attr1 = rows.map(row => header(row,"attr1")) 
val attr2 = rows.map(row => header(row,"attr2")) 
attr1.map(k => (k,1)).reduceByKey(_+_) 

attr1.foreach (println) 

wie kann ich hinzufügen, um den Zustand in meinem Code? das Ergebnis meines Code ist:

(11111,2) 
(22222,2) 
(33333,1) 

Antwort

0

Filter verwenden (wieder):

val rows = data 
    .filter(line => header(line,"attr1") != "attr1") 
    .filter(line => header(line,"attr2") == "MOC") 

Und dann weiter wie bisher ...

+0

die Konsole nichts angezeigt –