在Python Spark中连接两个不同RDD的字符串

时间:2016-07-11 09:50:12

标签: python string apache-spark concatenation rdd

我们说我有2个rdds: 第一个rdd由字符串组成,这些字符串是html请求:

rdd1:

serverIP:80 clientIP1 - - [10/Jun/2016:10:47:37 +0200] "GET /path/to/page1 [...]"
serverIP:80 clientIP2 - - [11/Jun/2016:11:25:12 +0200] "GET /path/to/page2 [...]"
...

第二个rdd只是整数:

rdd2:

0.025
0.56
...

我想逐行连接字符串,以获得第三个rdd,如下所示: rdd3:

serverIP:80 clientIP1 - - [10/Jun/2016:10:47:37 +0200] "GET /path/to/page1 [...]" 0.025
serverIP:80 clientIP2 - - [11/Jun/2016:11:25:12 +0200] "GET /path/to/page2 [...]" 0.56
...

顺便说一下,这份工作是一项流媒体工作。可以这么说,我不想将数据永久存储在某种sql表或其他东西中。

关于如何解决这个问题的任何想法?

提前致谢!

编辑:对于尝试加入Dstream而非rdd的人,请看一下:How to Combine two Dstreams using Pyspark (similar to .zip on normal RDD)

1 个答案:

答案 0 :(得分:1)

如果您可以依赖两个rdd的序列来匹配,您可以使用zip:

val rdd1 = sc.parallelize(List("a", "b", "c"))
val rdd2 = sc.parallelize(List(1.1, 1.2, 1.3))

val rdd3 = rdd1.zip(rdd2).map({case (s, d) => s + " " + d})

rdd3.collect() foreach println

// a 1.1
// b 1.2
// c 1.3