Pyspark Single RDD to Multiple RDD by Key from RDD



我是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中是否有任何功能?

正如 @user6910411所提到的,不可能使用一个函数调用来执行此操作。

尽管您的回答,该帖子实际上确实提供了有关您的问题的大量见解:答案的第一句话已经说明

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

除此之外,理论上可以通过为每个单个索引分开来做到这一点 - 不是您想为可能大的RDD做的事情。取而代之的是,简单的groupByKey可以解决与您的请求类似的事情,但在同一RDD之内。根据您的进一步处理,应该提到,由于其过量的洗牌操作,应避免使用GroupByKey进行减少操作。

最新更新