簡體   English   中英

在Scala中的單個文本文件中保存兩個或更多不同的RDD

[英]Save two or more different RDDs in a single text file in scala

當我使用saveAsTextFile類的時候,

rdd1.saveAsTextFile("../savefile")
rdd2.saveAsTextFile("../savefile")

我不能將兩個不同的RDD放入單個文本文件中。 有辦法嗎?

此外,有什么方法可以將某些格式應用於我要擰入文本文件的文本? 例如,添加\\n或其他格式。

  1. 在Spark中, 單個文本文件相當模糊。 每個分區都是單獨保存的,這意味着每個分區只有一個文件。 如果要為RDD使用單個磁盤,則必須將數據移動到單個分區或收集,並且在大多數情況下,這要么成本高昂,要么根本不可行。

  2. 您可以使用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) 

    如果類型不同,則整個想法聞起來卻很腥。

  3. 如果要使用特定格式 ,則必須在調用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM