use*_*051 5 python pkg-resources parquet python-wheel databricks
我将以下代码打包到 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"))))
Run Code Online (Sandbox Code Playgroud)
我确认whl文件正确包含sampleFolder/data/目录下的镶木地板文件。当我在本地运行它时,它可以工作,但是当我将此 whl 文件上传到 dbfs 并运行时,我收到此错误:
AnalysisException: Path does not exist: dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data;
Run Code Online (Sandbox Code Playgroud)
我确认这个目录实际上不存在: dbfs:/databricks/python 知道这个错误可能是什么吗?
谢谢。
小智 5
默认情况下,Databricks 上的 Spark 可以处理 DBFS 上的文件。
但是,如果您想使用 databricks 中的 Spark.read.parquet 函数读取文件,您可以使用前缀file:后跟文件的完整路径,例如 -
spark.read.parquet('file:/home/user1/file_name')
^^^^
Run Code Online (Sandbox Code Playgroud)
默认情况下,Databricks 上的 Spark 会处理 DBFS 上的文件,直到您显式更改架构为止。在您的情况下,该path_to_model函数返回 string /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))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
7463 次 |
| 最近记录: |