Python 无法在spark中执行2个连续分组
我正在与Spark合作开发python 我的问题是:我有一个Python 无法在spark中执行2个连续分组,python,csv,apache-spark,Python,Csv,Apache Spark,我正在与Spark合作开发python 我的问题是:我有一个.csv文件,其中包含一些数据(int1、int2、int3、date)。我在int1上做了一个groupByKey。现在,我想用第一个groupBy创建的rdd在我的日期执行另一个groupBy 问题是我做不到。有什么想法吗 问候 编辑2: 从pyspark导入SparkContext 导入csv 导入系统 导入StringIO sc = SparkContext("local", "Simple App") file = sc.te
.csv
文件,其中包含一些数据(int1、int2、int3、date)。我在int1
上做了一个groupByKey
。现在,我想用第一个groupBy
创建的rdd在我的日期执行另一个groupBy
问题是我做不到。有什么想法吗
问候
编辑2:
从pyspark导入SparkContext
导入csv
导入系统
导入StringIO
sc = SparkContext("local", "Simple App")
file = sc.textFile("histories_2week9.csv")
csvById12Rdd=file.map(lambda (id1,id2,value): ((id1,id2),value)).groupByKey()
csvById1Rdd=csvById12Rdd.map(lambda ((id1,id2),group):(id1, (id2,group))).groupByKey()
def printit(one):
id1, twos=one
print("Id1:{}".format(id1))
for two in twos:
id2, values=two
print("Id1:{} Id2:{}".format(id1,id2))
for value in values:
print("Id1:{} Id2:{} Value:{}".format(id1,id2,value))
csvById12Rdd.first().foreach(printit)
csv就像
31705,48,22014-10-28T18:14:09.000Z
编辑3:
我可以用这段代码打印迭代器数据
from pyspark import SparkContext
import csv
import sys
import StringIO
sc = SparkContext("local", "Simple App")
file = sc.textFile("histories_2week9.csv")
def go_in_rdd2(x):
print x[0]
for i in x[1]:
print i
counts = file.map(lambda line: (line.split(",")[0],line.split(",")[1:]))
counts = counts.groupByKey()
counts.foreach(go_in_rdd2)
但是我仍然无法通过groupBy返回(Key,Iterable[Value])的RDD进行分组,你能用另一种方法吗
csv=[(1,1,"One","Un"),(1,2,"Two","Deux"),(2,1,"Three","Trois"),(2,1,"Four","Quatre")]
csvRdd=sc.parallelize(csv)
# Step 1
csvById12Rdd=csvRdd.map(lambda (id1,id2,value1,value2): ((id1,id2),(value1,value2))).groupByKey()
# Step 2
csvById1Rdd=csvById12Rdd.map(lambda ((id1,id2),group):(id1, (id2,group))).groupByKey()
# Print
def printit(one):
id1, twos=one
print("Id1:{}".format(id1))
for two in twos:
id2, values=two
print("Id1:{} Id2:{}".format(id1,id2))
for value1,value2 in values:
print("Id1:{} Id2:{} Values:{} {}".format(id1,id2,value1,value2))
csvById1Rdd.foreach(printit)
如果有错误消息,您的工作是否崩溃,我们需要更多信息来回答问题谢谢您的时间。当我尝试你的方法时,当你的打印函数被调用时,我收到一条错误消息,我得到“ValueError:太多的值无法解包”,但我认为我在Spark 1.2.1中用Python 2.7测试的2个groupBy工作。你使用Python3吗?你接受这个答案吗?我使用Python2.7和spark 1.2.1,我猜你在元组中添加了一些值。“ValueError:太多的值无法解包”表示元组的大小不正确,例如,如果您编写了类似“1,2=(1,2,3)”(左手边两个元素,右手边三个元素)的内容,我试图修改您的代码,使其与具有4个字段的csv一起工作,您认为这是一个好主意吗?