如何从单个RDD添加2个RDD列,然后根据PySpark中的日期数据进行行聚合

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 stringfloat),并形成新的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中做到这一点?

Ami*_*viv 0

对于问题的第一部分,即将两个 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)