我是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-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 ||从1RDD (Test_RDD)到3RDD (RDD_1001_01,RDD_1002_03,RDD_1004_01),新RDD的名称应该类似于RDD_(来自Test_RDD的唯一列名)。在Pyspark中有可用于此场景的函数吗?
发布于 2017-03-06 21:11:22
正如@user6910411已经提到的,使用单个函数调用不可能做到这一点。
尽管你回答了,但这篇文章确实为你的问题提供了大量的洞察力:答案的第一句话已经说明
不可能从单个转换中产生多个RDD*。如果您想拆分RDD,则必须为每个拆分条件应用一个过滤器。
除此之外,理论上您可以通过对每个单独的索引进行拆分来做到这一点-对于可能很大的RDD,这不是您想要做的事情。相反,一个简单的groupByKey就可以在相同的RDD内实现与您的请求类似的功能。根据您的进一步处理,应该提到,您should avoid groupByKey for reduce operations,由于其过多的混洗操作。
https://stackoverflow.com/questions/42624650
复制相似问题