来自RDD的密钥Pyspark单RDD到多个RDD

时间:2017-03-06 11:37:40

标签: python apache-spark pyspark rdd data-manipulation

我是Pyspark的新手,我正在使用Spark 2.0.2。

我的RDD名为Test_RDD,结构如下:

U-Key  ||  V1  ||  V2  ||  V3  ||
-----------------------------------

1001_01  ||  12  ||  41   ||  21  ||

1001_01  ||  36  ||  43   ||  63  ||

1001_01  ||  60  ||  45   ||  10  ||

1002_03  ||  84  ||  57   ||  14  ||

1002_03  ||  18  ||  49   ||  18  ||

1004_01  ||  12  ||  41   ||  22  ||

1004_01  ||  16  ||  43   ||  26  ||

我需要根据U-Key列上的唯一值创建新的RDD,例如

RDD_1001_01 as:

U-Key  ||  V1  ||  V2  ||  V3  ||
-----------------------------------
1001_01  ||  12  ||  41   ||  21  ||

1001_01  ||  36  ||  43   ||  63  ||

1001_01  ||  60  ||  45   ||  10  ||

RDD_1002_03 as:

U-Key  ||  V1  ||  V2  ||  V3  ||
-----------------------------------

1002_03  ||  84  ||  57   ||  14  ||

1002_03  ||  18  ||  49   ||  18  ||

RDD_1004_01 as:

U-Key  ||  V1  ||  V2  ||  V3  ||
-----------------------------------

1004_01  ||  12  ||  41   ||  22  ||

1004_01  ||  16  ||  43   ||  26  ||

从1个RDD(Test_RDD)到3个RDD(RDD_1001_01,RDD_1002_03,RDD_1004_01), 新RDD的名称应该类似于RDD_(来自Test_RDD的唯一列名)。 Pyspark中是否有适用于此场景的功能?

1 个答案:

答案 0 :(得分:1)

正如@ user6910411已经提到的那样,单个函数调用无法做到这一点。

尽管你有答案,但该帖实际上确实提供了大量关于你问题的见解:答案的第一句话已经陈述

  

不可能从单个转换*中产生多个RDD。如果要拆分RDD,则必须为每个拆分条件应用过滤器。

除此之外,理论上你可以通过分割每个单独的索引来做到这一点 - 而不是你想要为一个可能很大的RDD做的事情。 相反,一个简单的groupByKey可以实现类似于您的请求的技巧,但在同一个RDD中。根据您的进一步处理,应该提到您should avoid groupByKey for reduce operations,因为它有过多的随机播放操作。