2016-12-05 3 views
0

Ich habe die unten Daten- ich mit dem ersten Elemente gruppieren wollen - ich mit pySpark Kern versuchen (NICHT SQL Funken)pySpark - groupByKey Problem

(u'CRIM SEXUAL ASSAULT', u'HZ256372', u'003', u'43'), 
(u'THEFT', u'HZ257172', u'011', u'27'), 
(u'ASSAULT', u'HY266148', u'019', u'6'), 
(u'WEAPONS VIOLATION', u'HY299741', u'010', u'29'), 
(u'CRIM SEXUAL ASSAULT', u'HY469211', u'025', u'19'), 
(u'NARCOTICS', u'HY313819', u'016', u'11'), 
(u'NARCOTICS', u'HY215976', u'003', u'42'), 
(u'NARCOTICS', u'HY360910', u'011', u'27'), 
(u'NARCOTICS', u'HY381916', u'015', u'25') 

Ich habe versucht, mit

file.groupByKey().map(lambda x : (x[0], list(x[1]))).collect() 

das hat nicht funktioniert

Antwort

3

Es sollte nicht funktionieren. groupByKey kann nur auf RDD von Schlüssel-Wert-Paaren (How to determine if object is a valid key-value pair in PySpark) und ein Tupel beliebiger Länge nicht aufgerufen werden.

Entscheiden Sie zuerst, welcher Wert ein Schlüssel ist und map oder keyBy. Zum Beispiel

rdd.map(lambda x: (x[0], x[1:])).groupByKey() 
+0

die oben Hinzufügen, ich habe mit der Liste spielen() sonst werden wir einen Fehler wie „pyspark.resultiterable.ResultIterable erhalten " Danke für die Antwort - –

0

Got dies mit dem Balg Code arbeitete

from pyspark import SparkContext 
sc = SparkContext() 
def chicagofile(line): 
     sLine = line.split(",") 
     cNum = sLine[1] 
     cDist = sLine[11] 
     cType = sLine[5] 
     cCommArea = sLine[13] 
     return (cType,cNum,cDist,cCommArea) 
cFile = sc.textFile("/user/sachinkerala6174/inData/ChicagoCrime15/crimes2015.csv") 
getFile = cFile.map(chicagofile) 
mapCType = getFile.map(lambda x : (x[0],(x[1],x[2],x[3]))) 
grp = mapCType.groupByKey().map(lambda x : (x[0], (list(x[1])))) 
saveFile = grp.saveAsTextFile("/user/sachinkerala6174/inData/ChicagoCrime15/res1") 
print grp.collect()