我想从一个文件夹中读取多个实木复合地板文件,该文件夹还包含一些其他文件类型(csv,avro)到数据框中。我只想阅读其镶木地板,如果有其他任何内容,请跳过并转到下一个。 问题是实木复合地板文件可能没有扩展名,编解码器也可能因文件而异。在Spark-scala中,有没有办法做到这一点?
答案 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:_*)
上面的代码中的 spark
是SparkSession
对象。此代码也应适用于Spark 1.x版本,因为parquet()
的方法签名在Spark 1.x和Spark 2.x版本中相同。