使用通配符打开多个csv文件Spark Scala

时间:2016-06-22 20:26:08

标签: scala apache-spark spark-dataframe

嗨,我说我有一些表,其中包含存储在多个.csv文件中的相同标题

我想做这样的事情

scala> val files =  sqlContext.read
.format("com.databricks.spark.csv")
.option("header","true")
.load("file:///PATH_TO_FILE/*.csv")

但是当我这样做时,我会从其他文件的标题中获得额外的列

在一个简单的例子中,我有2个.csv文件,当我单独加载它们然后使用unionAll组合它时,我得到正确的行数。但是当我尝试执行上述操作时,我会得到一个额外的行(来自第二个文件的标题行)。单独加载它们然后联合它们将无法工作,因为我可能需要打开很多文件。

无论如何都要执行上述操作,以便不包含额外的标题

1 个答案:

答案 0 :(得分:0)

你可能最终必须加入所有这些。要立即完成,您可以尝试下面的内容。

//Get all the individual file paths
def getListOfFiles(dir: File):List[File] = dir.listFiles.filter(_.isFile).toList
val filelist = getListOfFiles(new File("file:///PATH_TO_FILE/"))

//Read from the list of files you created
val Files= filelist.map(file => { sqlContext.read.format("com.databricks.spark.csv").option("header","true").load(file.getPath.toString) })

//Merge all the data into a single rdd
val mergedFile= Files.reduce((x, y) => x.unionAll(y))