【问题标题】:AnalysisException: Path does not exist: dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data;AnalysisException:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data;
【发布时间】:2021-09-13 01:25:47
【问题描述】:

我将以下代码打包到一个 whl 文件中:

from pkg_resources import resource_filename
def path_to_model(anomaly_dir_name: str, data_path: str):
    filepath = resource_filename(anomaly_dir_name, data_path)
    return filepath
def read_data(spark) -> DataFrame:
    return (spark.read.parquet(str(path_to_model("sampleFolder", "data"))))

我确认 whl 文件正确包含 sampleFolder/data/ 目录下的 parquet 文件。当我在本地运行它时它可以工作,但是当我将此 whl 文件上传到 dbfs 并运行时,我得到了这个错误:

AnalysisException: Path does not exist: dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data;

我确认这个目录实际上不存在:dbfs:/databricks/python 知道这个错误可能是什么吗?

谢谢。

【问题讨论】:

    标签: python databricks parquet python-wheel pkg-resources


    【解决方案1】:

    默认情况下,Databricks 上的 Spark 可以处理 DBFS 上的文件,直到您明确更改架构。在您的情况下,path_to_model 函数返回字符串 /databricks/python/lib/python3.7/site-packages/sampleFolder/data,并且因为它没有显式架构,所以 Spark 使用 dbfs 架构。但是文件在本地节点上,而不是在 DBFS 上——这就是 Spark 找不到它的原因。

    要解决这个问题,您需要将数据复制到 DBFS,然后从那里读取。这可以通过dbutils.fs.cp 命令完成。修改代码如下:

    def read_data(spark) -> DataFrame:
        data_path = str(path_to_model("sampleFolder", "data"))
        tmp_path = "/tmp/my_sample_data"
        dbutils.fs.cp("file:" + data_path, tmp_path, True)
        return (spark.read.parquet(tmp_path))
    

    【讨论】:

      猜你喜欢
      • 2020-01-25
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 2021-02-27
      • 1970-01-01
      • 2017-11-10
      相关资源
      最近更新 更多