Python 将RDD写入PySpark中的多个文件

Python 将RDD写入PySpark中的多个文件,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我有一个包含键值对的rdd。只有3个键,我想将给定键的所有元素写入一个文本文件。目前我做这件事有三次,但我想看看我是否能一次做到 以下是我到目前为止的情况: # I have an rdd (called my_rdd) such that a record is a key value pair, e.g.: # ('data_set_1','value1,value2,value3,...,value100') my_rdd.cache() my_keys = ['data_set_1'

我有一个包含键值对的rdd。只有3个键,我想将给定键的所有元素写入一个文本文件。目前我做这件事有三次,但我想看看我是否能一次做到

以下是我到目前为止的情况:

# I have an rdd (called my_rdd) such that a record is a key value pair, e.g.: 
# ('data_set_1','value1,value2,value3,...,value100')

my_rdd.cache()
my_keys = ['data_set_1','data_set_2','data_set_3']
for key in my_keys:
    my_rdd.filter(lambda l: l[0] == key).map(lambda l: l[1]).saveAsTextFile(my_path+'/'+key)

这是可行的,但是缓存它并迭代三次可能是一个漫长的过程。我想知道是否有任何方法可以同时写入所有三个文件?

使用自定义分区器的替代方法(与Def_Os提供的方法相比,在写入输出文件之前对数据集进行分区)

例如:
RDD[(K,W)].partitionBy(partitioner:partitioner)


这有一个问题:。此处发布的解决方法:@mgoldwaser——这是一个很好的rdd案例研究,但是可以使用PartitionByDataFrame编写器类轻松地使用dataframe完成。。这可以用Python编写吗?
class CustmozedPartitioner extends Partitioner {

  override def numPartitions: Int = 4

  override def getPartition(key: Any): Int = {
    key match {
      case "data_set_1" => 0
      case "data_set_2" => 1
      case "data_set_3" => 2
      case _ => 3
    } 
  }
}