Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark通过RDD中的键将单个RDD转换为多个RDD_Python_Apache Spark_Pyspark_Rdd_Data Manipulation - Fatal编程技术网

Python Pyspark通过RDD中的键将单个RDD转换为多个RDD

Python Pyspark通过RDD中的键将单个RDD转换为多个RDD,python,apache-spark,pyspark,rdd,data-manipulation,Python,Apache Spark,Pyspark,Rdd,Data Manipulation,我是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 ||

我是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键列上可用的唯一值创建新的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(测试RDD)到3个RDD(RDD_1001_01、RDD_1002_03、RDD_1004_01),
新RDD的名称应该类似于RDD(Test\RDD中唯一的列名)。Pyspark中是否有任何函数可用于此场景?

正如@user6910411所述,单次函数调用是不可能做到这一点的

尽管你给出了答案,但这篇文章确实为你的问题提供了大量的见解:答案的第一句话已经说明了这一点

不可能从单个转换中生成多个RDD*。如果要拆分RDD,必须为每个拆分条件应用筛选器

除此之外,从理论上讲,您可以通过对每个单独的索引进行拆分来实现这一点,而不是对可能较大的RDD进行拆分。 相反,一个简单的
groupByKey
可以在相同的RDD中实现与您的请求类似的功能。根据您的进一步处理,应该提到的是,由于其洗牌操作量过大,因此您需要执行以下操作