在 spark 中设置 textinputformat.record.delimiter

Posted

技术标签:

【中文标题】在 spark 中设置 textinputformat.record.delimiter【英文标题】:Setting textinputformat.record.delimiter in spark 【发布时间】:2013-07-15 14:19:39 【问题描述】:

在 Spark 中,可以设置一些 hadoop 配置设置,例如,例如

System.setProperty("spark.hadoop.dfs.replication", "1")

这可行,复制因子设置为 1。 假设是这种情况,我认为这种模式(将“spark.hadoop.”添加到常规 hadoop 配置属性中)也适用于 textinputformat.record.delimiter:

System.setProperty("spark.hadoop.textinputformat.record.delimiter", "\n\n")

但是,spark 似乎只是忽略了此设置。 我是否以正确的方式设置textinputformat.record.delimiter? 有没有更简单的方法来设置textinputformat.record.delimiter。我想避免自己写InputFormat,因为我真的只需要获取由两个换行符分隔的记录。

【问题讨论】:

你用的是什么版本的hadoop? 我正在使用带有 Hadoop 1 / CDH3 的 spark-0.7.2 的预构建版本(请参阅 here)。我很确定它实际上是用 hadoop 1.0.4 构建的 我不确定它是否在那个版本的 hadoop 中,您可能需要将自己重新编译为支持您想要的版本:issues.apache.org/jira/browse/HADOOP-7096 【参考方案1】:

我通过以下函数处理了普通的未压缩文件。

import org.apache.hadoop.io.LongWritable
import org.apache.hadoop.io.Text
import org.apache.hadoop.conf.Configuration
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat

def nlFile(path: String) = 
    val conf = new Configuration
    conf.set("textinputformat.record.delimiter", "\n")
    sc.newAPIHadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text], conf)
      .map(_._2.toString)

【讨论】:

能否分享一下你使用的hadoop核心版本。 @SumitKumarGhosh 我相信 CDH 4.4。 看来它需要特定版本 Hadoop 0.23.x 和 2.x 版本 - link 我使用了以下 maven 依赖项 - <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.2.0</version> </dependency> 这也很好 - <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.2.0</version> </dependency>跨度>

以上是关于在 spark 中设置 textinputformat.record.delimiter的主要内容,如果未能解决你的问题,请参考以下文章

在 spark textarea 中设置图像样式

在spark中设置textinputformat.record.delimiter

Spark 和 Amazon S3 未在执行程序中设置凭证

无法在 Jupyter notebook-anaconda 中设置 spark home

如何在 spark-shell 中设置 aws 访问密钥和 aws 密钥

在“spark-defaults.conf”中设置属性“spark.sql.hive.metastore.jars”后出现异常