我是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中是否有适用于此场景的功能?
答案 0 :(得分:1)
正如@ user6910411已经提到的那样,单个函数调用无法做到这一点。
尽管你有答案,但该帖实际上确实提供了大量关于你问题的见解:答案的第一句话已经陈述
不可能从单个转换*中产生多个RDD。如果要拆分RDD,则必须为每个拆分条件应用过滤器。
除此之外,理论上你可以通过分割每个单独的索引来做到这一点 - 而不是你想要为一个可能很大的RDD做的事情。
相反,一个简单的groupByKey
可以实现类似于您的请求的技巧,但在同一个RDD中。根据您的进一步处理,应该提到您should avoid groupByKey for reduce operations,因为它有过多的随机播放操作。