[英]Save two or more different RDDs in a single text file in scala
當我使用saveAsTextFile
類的時候,
rdd1.saveAsTextFile("../savefile")
rdd2.saveAsTextFile("../savefile")
我不能將兩個不同的RDD放入單個文本文件中。 有辦法嗎?
此外,有什么方法可以將某些格式應用於我要擰入文本文件的文本? 例如,添加\\n
或其他格式。
在Spark中, 單個文本文件相當模糊。 每個分區都是單獨保存的,這意味着每個分區只有一個文件。 如果要為RDD使用單個磁盤,則必須將數據移動到單個分區或收集,並且在大多數情況下,這要么成本高昂,要么根本不可行。
您可以使用union
方法(或lpiepiora在注釋中提到的++
來獲得RDD的聯合,但僅當兩個RDD的類型相同時,它才有效:
val rdd1 = sc.parallelize(1 to 5) val rdd2 = sc.parallelize(Seq("a", "b", "c", "d", "e")) rdd1.union(rdd2) // <console>:26: error: type mismatch; // found : org.apache.spark.rdd.RDD[String] // required: org.apache.spark.rdd.RDD[Int] // rdd1.union(rdd2)
如果類型不同,則整個想法聞起來卻很腥。
如果要使用特定格式 ,則必須在調用saveAsTextFile
之前應用它。 saveAsTextFile
只需在每個元素上調用toString
。
將以上所有內容放在一起:
import org.apache.spark.rdd.RDD
val rddStr1: RDD[String] = rdd1.map(x => ???) // Map to RDD[String]
val rddStr2: RDD[String] = rdd2.map(x => ???)
rdd1.union(rdd2)
.repartition(1) // Not recommended!
.saveAsTextFile(some_path)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.