繁体   English   中英

AnalysisException:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data;

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

我将以下代码打包在一个 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 知道这个错误可能是什么吗?

谢谢。

默认情况下,Spark on Databricks 使用 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))

默认情况下,Databricks 上的 Spark 使用 DBFS 上的文件。

但是,如果您想在 databricks 中使用 spark.read.parquet 函数读取文件,您可以使用前缀file:<\/strong>后跟文件<\/strong>的完整路径 例如 - spark.read.parquet(' file:<\/strong> \/home\/user1\/file_name' )

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM