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

我有以下结构的称为Test_RDD的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键列上的唯一值创建新的RDD

RDD_1001_01为:

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

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

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


RDD_1002_03为:

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

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

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


RDD_1004_01为:

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内完成。根据您的进一步处理,应提及您should avoid groupByKey for reduce operations,因为其洗牌操作过多。

08-05 12:49