2014-10-27 82 views
1

我有两个RDDS使用不同的密钥:像Spark中现有的RDD一样分配新的RDD?

RDD1: (K1, V1) 
RDD2: (K2, V2) 

而且我有从V2数据进行操作的功能,并且随后映射K2K1。结果是一个新的RDD,RDD3: (K1, V2_transformed)。我的最终结果是基于RDD1V1RDD3V2_transformed的一些操作,通过密钥

在我看来,如果RDD3的分配方式与RDD1的分配方式相同,这样可以避免以后的昂贵连接。有没有一种先验的方式指定我要RDD3分配与RDD1相同?

我使用PySpark。

回答

3

你可以使用rdd.partitionBy(new HashPartitioner(numpartitions)),如果你对两个RDD使用相同的分区器,你应该没问题。

+0

由于我使用Python,我仍然可以将分区程序传递给'rdd.partitionBy'吗?是文档中提到的'portable_hash'('partitionBy(self,numPartitions,partitionFunc = portable_hash)')? – 2014-10-27 18:07:59

+0

@Def_Os不知道从未使用python版本 – aaronman 2014-10-27 18:13:30

+0

没有参数的'rdd.partitionBy'(选择默认值)对此很有效。 – 2015-03-30 00:16:31