Scala spark textfile加载文件而不是行

Scala spark textfile加载文件而不是行,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,在Spark中,我们可以使用textFile将文件加载到行中,并尝试对这些行执行以下操作 val lines = sc.textFile("xxx") val counts = lines.filter(line => lines.contains("a")).count() val blocks = sc.textFile("xxx", 3 line) 但是,在我的情况下,我希望将文件加载到块中,因为文件和块中的数据如下所示。块将在文件中用空行分隔 user: 111 book: 2

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

val lines = sc.textFile("xxx")
val counts = lines.filter(line => lines.contains("a")).count()
val blocks = sc.textFile("xxx", 3 line)
但是,在我的情况下,我希望将文件加载到块中,因为文件和块中的数据如下所示。块将在文件中用空行分隔

user: 111
book: 222
comments: like it!
因此,我希望textFile函数或任何其他解决方案可以帮助我加载带有块的文件,具体实现如下

val lines = sc.textFile("xxx")
val counts = lines.filter(line => lines.contains("a")).count()
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属性进行定制,如本文所述。在您的情况下,分隔符可以是:

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

您希望得到什么来代替
RDD[String]
这是
textFile
方法的返回类型?如何检测块的结束?你有什么特殊的分隔符吗?@naderhajighanbari返回类型是RDD[String],我想也许我可以将结果行分组groups@kylejan由于分布式处理,我认为如果在阅读行之后尝试对行进行分组,您将遇到问题。在单个节点上,这是正常的。在多个节点上,一个块可以分成两半,前半部分给一个节点,后半部分给另一个。非常棒!我要试试看!谢谢