在 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/