スカラーのパスのSequence
にあるファイルを読み込もうとしています。以下はサンプル(疑似)コードです:スパーク:パスが存在する場合のみファイルを読み込みます。
ここで、上記のシーケンスでは、いくつかのパスが存在するのに対し、いくつかのパスは存在しません。 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を使用することはできません存在を確認してください。例えば
paths.filter(f => new java.io.File(f).exists)
:
Seq("/tmp", "xx").filter(f => new java.io.File(f).exists)
// res18: List[String] = List(/tmp)
'Paths'はローカルの' hdfs'パスまたは 's3'パスです。 'File.exists'が' s3'で動作するかどうかは不明です。 –
パスがHDFS/S3パス(Sparkでよく使用されるパス)である場合、パスの存在を確認するために少し異なるAPIが必要になります。 [@DarshanMehtaあなたは3秒で私にそれを打つ:)] –
@ TzachZoharハハはい。私は今質問を更新しました。 –