Spark 读取路径/文件名中包含空格的 csv 文件时出错



我想使用 Spark 读取一个 csv 文件。文件的路径包含空格。Spark 正在用%20替换空格。

这是代码:

val tmpDF = spark.read.format("com.databricks.spark.csv").option("multiLine", value = true).option("quote", """).option("escape", """).option("header", "true").option("inferSchema", "true").option("delimiter", delimiter).load(filename)
tmpDF.show(10)

因此,当执行tmpDF.show(10)方法时,会抛出以下错误:

java.io.FileNotFoundException: No such file or directory: s3://{bucket_name}/all/Proposal%20and%20pre-approval/filen_name_20190826-215950.csv 

基础文件可能已更新。您可以通过在 SQL 中运行REFRESH TABLE tableName命令或重新创建所涉及的数据集/数据帧来显式使 Spark 中的缓存失效。

我签入了 s3,文件确实存在,但路径有一个常规空格而不是%20.

知道如何处理吗?我无法更改路径,因为它们是由我无法修改的组件生成的。

这是url编码的典型问题。来自 S3 的 URL 使用 %20 进行编码。但是,火花错误地解码了它。

关于这个问题有两个问题

  1. https://jira.apache.org/jira/browse/SPARK-23148
  2. https://jira.apache.org/jira/browse/SPARK-24320

这些问题已在 spark2.3 版本中得到解决。如果您使用的是旧版本

解码 url 后,您需要转义文件名。

最新更新