当前位置: 首页 > 知识库问答 >
问题:

在Spark中保存时,在文本文件之前添加标题

金谭三
2023-03-14

我有一些火花代码来处理csv文件。它对其进行一些转换。我现在想将此RDD保存为csv文件并添加一个标头。此RDD的每一行都已正确格式化。

我不知道怎么做。我想用头字符串和我的RDD进行联合,但头字符串不是RDD,因此无法工作。

共有3个答案

姬朗
2023-03-14
def addHeaderToRdd(sparkCtx: SparkContext, lines: RDD[String], header: String): RDD[String] = {

    val headerRDD = sparkCtx.parallelize(List((-1L, header)))     // We index the header with -1, so that the sort will put it on top.

    val pairRDD = lines.zipWithIndex()

    val pairRDD2 = pairRDD.map(t => (t._2, t._1))

    val allRDD = pairRDD2.union(headerRDD)

    val allSortedRDD = allRDD.sortByKey()

    return allSortedRDD.values
}
鲁杜吟
2023-03-14

关于在没有联合的情况下编写它的一些帮助(在合并时提供了标题)

val fileHeader ="This is header"
val fileHeaderStream: InputStream = new  ByteArrayInputStream(fileHeader.getBytes(StandardCharsets.UTF_8));
val output = IOUtils.copyBytes(fileHeaderStream,out,conf,false)

现在循环遍历文件部分以使用

val in: DataInputStream = ...<data input stream from file >
 IOUtils.copyBytes(in, output, conf, false)

这对我来说确保了标题总是作为第一行,即使您使用coalasec/重新分区进行高效编写

宿嘉
2023-03-14

您可以从标题行中制作一个RDD,然后Union它,是的:

val rdd: RDD[String] = ...
val header: RDD[String] = sc.parallelize(Array("my,header,row"))
header.union(rdd).saveAsTextFile(...)

然后,您将得到一组合并的文件。

问题是,我认为不能保证头是第一个分区,因此最终会出现在第00000部分,并位于文件的顶部。实际上,我很肯定它会的。

更可靠的方法是使用Hadoop命令,如hdfs来合并part-xxxxx文件,作为命令的一部分,只需插入文件的标题行即可。

 类似资料:
  • 查看此截图: 我正在使用这段代码添加表情符号在div的跨度。 但标记后没有附加空格,这样我就可以在标记后编写下一个文本。

  • 问题内容: 我有一个带有1000个json对象的json文件。有什么办法可以在每个json文档之前添加标题行?有没有最简单的方法? 示例:我有1000个这样的对象 我想为每个json对象添加如下所示的索引标头,以便可以在Elasticsearch Bulk api中使用 问题答案: 如果您愿意利用Logstash,则无需修改文件,而可以简单地逐行读取文件,并使用利用Bulk API 的输出将其流式

  • 问题内容: 在python中保存文件时如何添加BOM(unicode签名): 我需要将文件转换为。现在,脚本运行良好,但没有BOM。 问题答案: 将其直接写入文件开头:

  • 问题内容: 假设您有一个文件 并希望添加一些标头信息,例如 如何添加此“标题”?手动执行似乎很简单。点击几回车,复制/粘贴或写信息,就可以了。当然,在R中,我可以读入,创建,添加标题信息,然后。 我想知道是否还有另一种从“顶部”附加文件的方法。也欢迎使用其他解决方案(来自c ++或Java …)(我很好奇其他语言如何解决此问题)。 问题答案: 在R中,不需要使用额外的文件。您可以这样做: 但是,使

  • 社区向导, 我真的很沮丧。谈到Spark、Hadoop等人,似乎没有什么是直截了当的。 在过去的几个小时里,我试图找到以下问题的解决方案: 版本: 操作系统:Windows 10 火花版本:2.4.6 Scala版本:2.11.12 Hadoop版本:2.7.1 Java版本:1.80_202(64位) 变量: SPARK\u主页:C:\SPARK 路径: %SPARK_HOME%\bin %HA

  • 问题内容: 我有一个约有1,700个文件的文件夹。它们都被命名为like 或,等等。我想重命名所有文件,以便所有文件名均为四位数。 即,成为。 什么是可以执行此操作的shell脚本?或一个相关的问题:如何使用grep只匹配包含以下内容的行(即一位数字,然后是一个句点,然后是字母)? 这是我到目前为止的内容: 基本上,运行该命令3次,并在其中使用命令查找一位数字,两位数字和三位数字的文件名(更改了初