如何阅读多个文件(> 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
似乎将所有文件粘合在一起。
答案 0 :(得分:3)
一种方法是将HadoopFile
与TextInputFormat
:
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
的键表示给定行的文件开头的偏移量,因此您应该得到您想要的内容。