我是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进行减少操作。