Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 求和元组值以计算平均值-RDD_Apache Spark_Pyspark_Rdd - Fatal编程技术网

Apache spark 求和元组值以计算平均值-RDD

Apache spark 求和元组值以计算平均值-RDD,apache-spark,pyspark,rdd,Apache Spark,Pyspark,Rdd,我有下面的元组 #x y z [(('a','nexus4','stand'),(-5.958191,0.6880646,8.135345,1))] #A部分(键)B部分(值)计数 正如你所看到的,我有一个元组,它是我的键(a部分),我有另一个元组,它是我的值(B部分),还有一个数字,它是我对键部分不同值的计数 我的代码如下 #货物服务基准 讲师a=sc.textFile(“asdasd.csv”) datos=a.map(λx:((x.split(,“”[6],x.split(,“”[7],

我有下面的元组

#x y z
[(('a','nexus4','stand'),(-5.958191,0.6880646,8.135345,1))]
#A部分(键)B部分(值)计数
正如你所看到的,我有一个元组,它是我的键(a部分),我有另一个元组,它是我的值(B部分),还有一个数字,它是我对键部分不同值的计数

我的代码如下

#货物服务基准
讲师a=sc.textFile(“asdasd.csv”)
datos=a.map(λx:((x.split(,“”[6],x.split(,“”[7],x.split(,“”[9]),(float(x.split(,“”[3]),float(x.split(,“”[4]),float(x.split(,“”[5]))
meanRDD=(datos.mapValues(lambda x:(x,1)))
好的,现在我想对所有具有相同键的值求和,以计算X列、Y列或Z列的平均值

我想我可以通过使用reduceByKey来实现,但是我没有正确地应用这个函数

我的代码不起作用的示例:

sum=meandd.reduceByKey(λx,y:(x[0][0]+y[0][1],x[0][1]+y[1][1],x[0][2]+y[1][2]))
我知道之后我必须应用另一个MapValues函数将我的值除以我的计数部分,但总和不能正常工作

示例“asdasd.csv”文件

索引、到达时间、创建时间、x、y、z、用户、型号、设备、gt
014246966339081424696631913248572,-5.958191,0.6880646,8.135345,a,nexus4,nexus4_1,支架
11424696339091424696631918283972,-5.95224,0.6702118,8.136536,a,nexus4,nexus4_1,支架
2142469666339181424696631923288855,-5.9950867,0.653549199999999,8.204376,a,nexus4,nexus4_1,支架
314246966339191424696631928385290,-5.9427185,0.67616269999999,8.128204,a,nexus4,nexus4_1,支架
我的键是一个元组(Model,device,gt)我的值是(x,y,z)


有什么想法吗?

下面是使用
reduceByKey

lectura = sc.textFile("asdasd.csv")

datos = lectura.map(lambda x: ((x.split(",")[6], x.split(",")[7], x.split(",")[9]),(float(x.split(",")[3]),float(x.split(",")[4]), float(x.split(",")[5]))))

meanRDD = datos.mapValues(lambda x: (x, 1))\
               .reduceByKey(lambda ((x1, y1, z1), a1), ((x2, y2, z2), a2): ((x1+x2, y1+y2, z1+z2), a1+a2))\
               .mapValues(lambda ((x, y, z), sum): (x/float(sum), y/float(sum), z/float(sum)))

谢谢,我不知道,但是我收到了这个错误。d[k]=comb(d[k],v)如果d else creator(v)文件“”第8行中的k在TypeError中:“float”对象不可下标,我猜当您只能得到x[0]时,您正试图得到x[0][0]。如果您共享asdasd.csv的一些示例行,那么我可以帮助您调试it@fiticida,我更新了我的答案:)现在应该可以了:)首先,谢谢,代码是正确的,但是我读到现在不推荐使用括号,我使用Py3,元组su如lambda((x1,y1,z1),a1)和另一个,控制台将其标记为无效语法,正如您在本img中所看到的;错误是因为您尚未格式化代码。reducebykey和last mapValues前面有空格。去掉空格,你就没事了。此外,我建议你看看。这会更有帮助:)如果你觉得有帮助的话,你可以投票支持这篇文章:)