在Spark中向文本文件添加新行

时间:2015-04-28 08:55:36

标签: scala apache-spark

我使用命令

在Spark中读取了一个文本文件
val data = sc.textFile("/path/to/my/file/part-0000[0-4]")

我想添加一个新行作为我文件的标题。有没有办法在不将RDD变成数组的情况下做到这一点?

谢谢!

3 个答案:

答案 0 :(得分:2)

"第二部分"文件自动作为文件集处理。

val data = sc.textFile("/path/to/my/file") // Will read all parts.

只需添加标题并将其写出:

val header = sc.parallelize(Seq("...header..."))
val withHeader = header ++ data
withHeader.saveAsTextFile("/path/to/my/modified-file")

请注意,因为这必须读取和写入所有数据,所以它会比您可能直观地预期的要慢一些。 (毕竟你只是添加一个新行!)出于这个原因和其他原因,你可能最好不要添加这个标题,而是将数据库(列表列表)与数据分开存储。

答案 1 :(得分:1)

您实际上无法控制新行是否为第一个(标题),但您可以创建新的单例RDD并将其与现有行合并:

val extendedData = data ++  sc.makeRDD(Seq("my precious new line"))

所以

extendedData.filter(_ startsWith "my precious").first() 

可能会证明您的行已添加

答案 2 :(得分:-2)

RDD是不可变的。这意味着一旦创建,您将无法更改RDD的内容。您可以使用RDD转换从基础RDD创建新的RDD。