在 pyspark 中,即使有 1 个路径不存在,读取 csv 文件也会失败。我们怎样才能避免这种情况?

In pyspark, reading csv files gets failed if even 1 path does not exist. How can we avoid this?

在 pyspark 中,即使一条路径不存在,从不同路径读取 csv 文件也会失败。

Logs = spark.read.load(Logpaths, format="csv", schema=logsSchema, header="true", mode="DROPMALFORMED");

这里Logpaths是一个包含多个路径的数组。这些路径是根据给定的开始日期和结束日期范围动态创建的。如果日志路径包含 5 个路径并且前 3 个存在但第 4 个不存在。然后整个提取失败。我怎样才能在 pyspark 中避免这种情况,或者我怎样才能在阅读之前检查是否存在?

在 scala 中,我通过检查文件是否存在并使用 hadoop hdfs 文件系统 globStatus 函数过滤掉不存在的记录来做到这一点。

Path = '/bilal/2018.12.16/logs.csv'
val hadoopConf = new org.apache.hadoop.conf.Configuration()
val fs = org.apache.hadoop.fs.FileSystem.get(hadoopConf)
val fileStatus = fs.globStatus(new org.apache.hadoop.fs.Path(Path));

所以我得到了我要找的东西。就像我在问题中发布的代码一样,它可以在 Scala 中用于文件存在性检查。我们可以在 PySpark 的情况下使用以下代码。

fs = sc._jvm.org.apache.hadoop.fs.FileSystem.get(sc._jsc.hadoopConfiguration())
fs.exists(sc._jvm.org.apache.hadoop.fs.Path("bilal/logs/log.csv"))

这与 scala 中使用的代码完全相同,因此在这种情况下,我们使用 java hadoop 库并且 java 代码在 JVM 上运行,其中 spark 运行 .