我是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,因为其洗牌操作过多。