我有下面的数据 - 我想用第一个元素分组 - 我正在尝试使用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()
这没有成功
答案 0 :(得分:3)
它应该不起作用。 groupByKey
只能在键值对(How to determine if object is a valid key-value pair in PySpark)的RDD上调用,而任意长度的元组都不能调用。
首先确定哪个值是键,map
或keyBy
。例如
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()