只读实木复合地板文件

时间:2019-05-06 08:03:09

标签: scala apache-spark

我想从一个文件夹中读取多个实木复合地板文件,该文件夹还包含一些其他文件类型(csv,avro)到数据框中。我只想阅读其镶木地板,如果有其他任何内容,请跳过并转到下一个。 问题是实木复合地板文件可能没有扩展名,编解码器也可能因文件而异。在Spark-scala中,有没有办法做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以通过以下方式预先获取文件名:

improt org.apache.spark.sql.DataFrame
import scala.sys.process._

val fileNames: List[String] = "hdfs dfs -ls /path/to/files/on/hdfs".!!
                             .split("\n")
                             .filter(_.endsWith(".parquet"))
                             .map(_.split("\\s").last).toList

val df: DataFrame = spark.read.parquet(fileNames:_*)
上面的代码中的

sparkSparkSession对象。此代码也应适用于Spark 1.x版本,因为parquet()的方法签名在Spark 1.x和Spark 2.x版本中相同。