scala - spark 文本文件加载文件而不是行

标签 scala hadoop apache-spark

在 Spark 中,我们可以使用 textFile 将文件加载到行中,并尝试对这些行进行如下操作。

val lines = sc.textFile("xxx")
val counts = lines.filter(line => lines.contains("a")).count()

但是,在我的情况下,我想将文件加载到 block 中,因为文件和 block 中的数据如下所示。 block 将在文件中用空行分隔。

user: 111
book: 222
comments: like it!

因此,我希望 textFile 函数或任何其他解决方案可以帮助我加载带有 block 的文件,这可以通过以下方式实现。

val blocks = sc.textFile("xxx", 3 line)

有没有人遇到过这种情况?谢谢

最佳答案

我建议你从 Hdfs 实现你自己的文件阅读器功能。查看textFile 函数,它建立在hadoopFile 函数之上,并使用TextInputFormat:

def textFile(path: String, minPartitions: Int = defaultMinPartitions): RDD[String] = {
    assertNotStopped()
    hadoopFile(path, classOf[TextInputFormat], classOf[LongWritable], classOf[Text],
      minPartitions).map(pair => pair._2.toString).setName(path)
  }

但此 TextInputFormat 可以通过 hadoop 属性进行自定义,如 answer 中所述.在您的情况下,分隔符可以是:

conf.set("textinputformat.record.delimiter", "\n\n")

关于scala - spark 文本文件加载文件而不是行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29643348/

相关文章:

scala - 将两个匹配模式合而为一

scala - Play Activator 中的应用程序与亚马逊 AWS 中的服务器之间的通信

scala - 为什么 Value String 即使定义为 val 也不是稳定的标识符

hadoop - 配置单元:使用带分隔符的 collect_set

hadoop - 在java代码中找到hive-site.xml的位置

Scala:处理元组返回值是否需要临时变量?

hadoop - 配置单元:没有位置的外部分区表

r - Spark 错误 - 小数精度 39 超过最大精度 38

apache-spark - Databricks 中使用的集群管理器是什么?如何更改 Databricks 集群中的执行程序数量?

hadoop - 在独立模式下编写 Parquet 文件是可行的..多工作模式失败