我使用命令
在Spark中读取了一个文本文件val data = sc.textFile("/path/to/my/file/part-0000[0-4]")
我想添加一个新行作为我文件的标题。有没有办法在不将RDD变成数组的情况下做到这一点?
谢谢!
答案 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。