AnalysisException:路径不存在:dbfs:/databricks/python/lib/python3.



我正在将以下代码打包到一个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/目录下的镶木地板文件。当我在本地运行它时,它是有效的,但当我上传这个whl文件到dbfs并运行时,我会得到这个错误:

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

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

谢谢。

默认情况下,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))

默认情况下,Databricks上的Spark与DBFS上的文件一起工作。

但是,如果您想使用databricks中的spark.read.parquet函数读取文件,可以使用前缀file:,后跟文件的完整路径E.g-

spark.read.parquet('file:/home/user1/file_name')
^^^^

相关内容

  • 没有找到相关文章

最新更新