在scala中的单个文本文件中保存两个或多个不同的RDD

时间:2015-10-18 19:32:53

标签: scala apache-spark

当我使用saveAsTextFile时,

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

我无法将两个不同的RDD放入单个文本文件中。我有办法吗?

此外,有没有办法可以将一些格式应用到文本文件的文本中?例如,添加\n或其他格式。

1 个答案:

答案 0 :(得分:1)

  1. 单文本文件在Spark中相当模糊。每个分区都单独保存,这意味着每个分区可以获得一个文件。如果你想要一个单独的RDD,你必须将你的数据移动到一个分区或收集,大多数时候它要么昂贵,要么根本不可行。

  2. 您可以使用-方法(或评论中lpiepiora提到的=)获取RDD联盟,但仅当两个RDD相同时才有效类型:

    union

    如果类型不同,整个想法都会有点腥味。

  3. If you want a specific format您必须在致电++之前应用它。每个元素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) 只需calls toString

  4. 将以上所有内容放在一起:

    saveAsTextFile