pySpark - groupByKey不工作

时间:2016-12-05 16:52:56

标签: apache-spark pyspark

我有下面的数据 - 我想用第一个元素分组 - 我正在尝试使用pySpark核心(不是Spark SQL)

(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') 

我试过

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

这没有成功

2 个答案:

答案 0 :(得分:3)

它应该不起作用。 groupByKey只能在键值对(How to determine if object is a valid key-value pair in PySpark)的RDD上调用,而任意长度的元组都不能调用。

首先确定哪个值是键,mapkeyBy。例如

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

答案 1 :(得分:0)

使用下面的代码

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()