spark textfile加载文件而不是行

时间:2015-04-15 06:47:41

标签: scala hadoop apache-spark

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

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

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

user: 111
book: 222
comments: like it!

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

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

以前有人面对这种情况吗?感谢

1 个答案:

答案 0 :(得分:2)

我建议你从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")