Jas*_*ald 5 python aggregate apache-spark rdd pyspark
我RDDs在PySpark中有两个:
RDD1集:
[(u'2013-01-31 00:00:00', u'a', u'Pab', u'abc', u'd'),(u'2013-01-31 00:00:00', u'a', u'ab', u'abc', u'g'),.....]
Run Code Online (Sandbox Code Playgroud)
RDD2:
[(u'41',u'42.0'),(u'24',u'98.0'),....]
Run Code Online (Sandbox Code Playgroud)
两者RDDs都有相同的数字或行.现在我想做的是把所有的列从RDD1集的每一行(从转换中unicode正常string),并从RDD2每一行(从转换的第2列unicode string到float),并形成新的RDD这一点.所以新的RDD将如下所示:
RDD3:
[('2013-01-31 00:00:00', 'a', 'Pab', 'abc', 'd',42.0),('2013-01-31 00:00:00', 'a', 'ab', u'abc', 'g',98.0),.....]
Run Code Online (Sandbox Code Playgroud)
完成后,我想通过第1列中的值在aggregation此新行中的每一行(浮点值)中执行最后一个值.那芒在所有行的,他们最后的数值应予以补充.RDD3datedate2013-01-31 00:00:00
我怎么能在PySpark中做到这一点?
对于问题的第一部分,即将两个 rdd 合并为一个,其中每行都是 7 的元组,您可以这样做:
rdd3 = rdd1.zip(rdd2).map(lambda ((a,b,c,d,e), (f,g)): (a,b,c,d,e,f,g))
Run Code Online (Sandbox Code Playgroud)
我不确定您最终需要什么,只是日期和第二个值的总和吗?如果是这样,您不需要所有值:
rdd3 = rdd1.zip(rdd2).map(lambda ((a,b,c,d,e), (f,g)): (a,g))
rdd4 = rdd3.reduceByKey(lambda x, y: x+y)
Run Code Online (Sandbox Code Playgroud)