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

Scala 在Spark中向文本文件添加新行,scala,apache-spark,Scala,Apache Spark,我使用命令在Spark中读取了一个文本文件 val data = sc.textFile("/path/to/my/file/part-0000[0-4]") 我想添加一个新行作为我的文件头。有没有一种方法可以在不将RDD转换为数组的情况下实现这一点 谢谢大家! RDD是不可变的。这意味着您将无法在创建RDD后更改其内容。您可以使用RDD转换从基本RDD创建新的RDD。您实际上无法控制新行是否在第一行(标题),但您可以创建新的单例RDD并将其与现有RDD合并: val extendedData

我使用命令在Spark中读取了一个文本文件

val data = sc.textFile("/path/to/my/file/part-0000[0-4]")
我想添加一个新行作为我的文件头。有没有一种方法可以在不将RDD转换为数组的情况下实现这一点


谢谢大家!

RDD是不可变的。这意味着您将无法在创建RDD后更改其内容。您可以使用RDD转换从基本RDD创建新的RDD。

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

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

可能会证明您的行已添加

“部分”文件将自动作为文件集处理

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")

请注意,由于这必须读取和写入所有数据,因此它将比您直观预期的速度慢很多。(毕竟您只是添加了一行新行!)出于这个原因和其他原因,您最好不要添加此标题,而是将元数据(列列表)与数据分开存储。

使用
val header=sc.parallize(list(“\n”))创建新的Rdd
并将这两个Rdd一起添加
header++data
。但是它没有意义,你为什么需要它?对不起,新行的意思是有一些栏目名称的行。我的错。不管怎样,那正是我需要的,谢谢!我强烈建议您查看数据帧。简单地说,dataframe就是rdd,包含一些关于模式和类型的元信息。请记住,
header++data
不会为大型RDD保留订单。如果不让OP知道如何使用这些转换来实现他想要的,这并不是一个真正的答案。它应该是一个注释,您可以实际控制新行是否是第一行。在您的示例中,它将是最后一个,因为您将它放在原始RDD之后。“可能”是什么意思?你甚至都不谈文件。
val header = sc.parallelize(Seq("...header..."))
val withHeader = header ++ data
withHeader.saveAsTextFile("/path/to/my/modified-file")