Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.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
Apache spark 对RDD进行垂直分区并写入不同的位置_Apache Spark_Rdd - Fatal编程技术网

Apache spark 对RDD进行垂直分区并写入不同的位置

Apache spark 对RDD进行垂直分区并写入不同的位置,apache-spark,rdd,Apache Spark,Rdd,在spark 1.5+中,如何将“n”元组RDD的每一列写入不同的位置 例如,如果我有一个RDD[(String,String)]我希望第一列写入s3://bucket/first col,第二列写入s3://bucket/second col 我可以做到以下几点 val pairRDD: RDD[(String, String)] val cachedRDD = pairRDD.cache() cachedRDD.map(_._1).saveAsTextFile("s3://bucket

在spark 1.5+中,如何将“n”元组RDD的每一列写入不同的位置

例如,如果我有一个
RDD[(String,String)]
我希望第一列写入
s3://bucket/first col
,第二列写入
s3://bucket/second col

我可以做到以下几点

 val pairRDD: RDD[(String, String)]
 val cachedRDD = pairRDD.cache()
 cachedRDD.map(_._1).saveAsTextFile("s3://bucket/first-col")
 cachedRDD.map(_._2).saveAsTextFile("s3://bucket/second-col")

但这并不理想,因为我需要对RDD进行两次遍历。

一种方法是将元组转换为列表,然后使用map创建RDD列表,并对每个RDD执行保存,如下所示:

val fileNames:List[String] 
val input:RDD[(String, String...)] //could be a tuple of any size
val columnIDs = (1 to numCols)
val unzippedValues = input.map(_.productIterator.toList).persist() //converts tuple into list
val columnRDDs = columnIDs.map( a => unzippedValues.map(_(a)))
columnRDDs.zip(fileNames)foreach{case(b,fName) => b.saveAsTextFile(fName)}

如果只使用
Tuple2
,则可以使用
pairdd.keys
pairdd.values