我试图在 Scala 中读取 Sequence
路径下的文件。以下是示例(伪)代码:
val paths = Seq[String] //Seq of paths
val dataframe = spark.read.parquet(paths: _*)
在上面的序列中,有些路径存在,而有些路径不存在。在读取parquet
文件时,是否有办法忽略缺失的路径(以避免org.apache.spark.sql.AnalysisException: Path does not exist
)?
我尝试过以下方法,似乎可以解决问题,但是最终会读取相同的路径两次,这是我想要避免的:
val filteredPaths = paths.filter(p => Try(spark.read.parquet(p)).isSuccess)
我查看了DataFrameReader
的options
方法,但似乎没有类似于ignore_if_missing
的选项。
此外,这些路径可以是hdfs
或s3
(这个Seq
作为方法参数传递),在读取时,我不知道一个路径是s3
还是hdfs
,因此无法使用s3
或hdfs
特定的API来检查其是否存在。
FileSystem.get(new URI("s3://bucket"), spark.sparkContext.hadoopConfiguration)
。否则,它可能会创建一个HDFS文件系统并在检查S3文件系统路径时出错。 - Azuaron