【问题标题】:Setting textinputformat.record.delimiter in spark在 spark 中设置 textinputformat.record.delimiter
【发布时间】: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

标签: scala hadoop mapreduce apache-spark


【解决方案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>跨度>
猜你喜欢
  • 2017-12-28
  • 1970-01-01
  • 2019-01-09
  • 1970-01-01
  • 2014-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-29
相关资源
最近更新 更多