我正尝试阅读scala中Paths的Sequence
文件。下面是样本(伪)代码:Spark:只有在路径存在的情况下才能读取文件
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)
我检查了options
方法DataFrameReader
但似乎没有任何选项类似于ignore_if_missing
。
而且,这些路径可以是hdfs
或s3
(这Seq
被作为方法参数传递)和在阅读,我不知道一个路径是否是s3
或hdfs
所以不能用s3
或hdfs
特定API来检查存在。
“路径”可以是本地的'hdfs'路径或's3'路径。不确定'File.exists'是否适用于's3'。 –
如果路径是HDFS/S3路径(通常与Spark一起使用),那么需要稍微不同的API来检查路径存在。 [@DarshanMehta你击败了我3秒:)] –
@TzachZohar哈哈是的。我现在已经更新了这个问题。 –