spark:读取多个文本文件并将每个文件的第一行溢出?

时间:2015-12-22 01:19:03

标签: scala apache-spark

如何阅读多个文件(> 1000个文件),并说只打印出spark中每个文件的第一行?

我正在阅读链接 How to read multiple text files into a single RDD? 提到我可以使用以下语法在spark中读取多个文件(比如3个文件):

val fs = sc.textFile("a.txt,b.txt,c.txt")

fs似乎将所有文件粘合在一起。

1 个答案:

答案 0 :(得分:3)

一种方法是将HadoopFileTextInputFormat

一起使用
import org.apache.hadoop.mapred.TextInputFormat
import org.apache.hadoop.io.{LongWritable, Text}

val input: String = ???

val firstLines = sc.hadoopFile(
     input, classOf[TextInputFormat], classOf[LongWritable], classOf[Text])
  .flatMap {
    case (k, v) => if (k.get == 0) Seq(v.toString) else Seq.empty[String]
  }

由于TextInputFormat的键表示给定行的文件开头的偏移量,因此您应该得到您想要的内容。