无法在 Databricks 上使用 python 访问已安装的卷
Can't access mounted volume with python on Databricks
我正在尝试通过使用凭据直通将 Azure 存储帐户 Gen2 容器安装到 dbfs 来向他们的 Databricks 工作区中的团队授予对 Azure 存储帐户 Gen2 容器的访问权限。我希望能够使用 Active Directory 管理访问,因为最终会有容器以只读方式挂载。
从我的会议中摘录:
"spark_conf": {
"spark.databricks.cluster.profile": "serverless",
"spark.databricks.passthrough.enabled": "true",
"spark.databricks.delta.preview.enabled": "true",
"spark.databricks.pyspark.enableProcessIsolation": "true",
"spark.databricks.repl.allowedLanguages": "python,sql"
}
然后我运行下面的代码:
dbutils.fs.mount(
source = f"wasbs://data@storage_account_name.blob.core.windows.net",
mount_point = "/mnt/data/",
extra_configs = {
"fs.azure.account.auth.type":"CustomAccessToken",
"fs.azure.account.custom.token.provider.class":spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
}
这是成功的,因为我可以使用 dbutils 访问该卷。
>> dbutils.fs.ls('dbfs:/mnt/storage_account_name/data')
[FileInfo(path='dbfs:/mnt/storage_account_name/data/folder/', name='folder/', size=0)]
我的问题是当我 运行 %sh ls /dbfs/mnt/storage_account_name/data
或尝试使用 python
访问它时
>> import os
>> os.listdir('/dbfs/')
Out[1]: []
>> os.listdir('/dbfs/mnt/')
FileNotFoundError: [Errno 2] No such file or directory: '/dbfs/mnt/'
我找不到我缺少的东西。是否需要配置一些东西才能让 python 访问它?
谢谢。
答案很简单。
Local file API Limitations
The following list enumerates the limitations in local file API usage
that apply to each Databricks Runtime version.
All - Does not support credential passthrough.
来源:https://docs.microsoft.com/en-us/azure/databricks/data/databricks-file-system#local-file-apis
使用凭据直通选项时存在某些限制,这就是它不起作用的原因。没有语法问题。看到这个offical doc就明白了。
我正在尝试通过使用凭据直通将 Azure 存储帐户 Gen2 容器安装到 dbfs 来向他们的 Databricks 工作区中的团队授予对 Azure 存储帐户 Gen2 容器的访问权限。我希望能够使用 Active Directory 管理访问,因为最终会有容器以只读方式挂载。
从我的会议中摘录:
"spark_conf": {
"spark.databricks.cluster.profile": "serverless",
"spark.databricks.passthrough.enabled": "true",
"spark.databricks.delta.preview.enabled": "true",
"spark.databricks.pyspark.enableProcessIsolation": "true",
"spark.databricks.repl.allowedLanguages": "python,sql"
}
然后我运行下面的代码:
dbutils.fs.mount(
source = f"wasbs://data@storage_account_name.blob.core.windows.net",
mount_point = "/mnt/data/",
extra_configs = {
"fs.azure.account.auth.type":"CustomAccessToken",
"fs.azure.account.custom.token.provider.class":spark.conf.get("spark.databricks.passthrough.adls.gen2.tokenProviderClassName")
}
这是成功的,因为我可以使用 dbutils 访问该卷。
>> dbutils.fs.ls('dbfs:/mnt/storage_account_name/data')
[FileInfo(path='dbfs:/mnt/storage_account_name/data/folder/', name='folder/', size=0)]
我的问题是当我 运行 %sh ls /dbfs/mnt/storage_account_name/data
或尝试使用 python
>> import os
>> os.listdir('/dbfs/')
Out[1]: []
>> os.listdir('/dbfs/mnt/')
FileNotFoundError: [Errno 2] No such file or directory: '/dbfs/mnt/'
我找不到我缺少的东西。是否需要配置一些东西才能让 python 访问它? 谢谢。
答案很简单。
Local file API Limitations
The following list enumerates the limitations in local file API usage that apply to each Databricks Runtime version.
All - Does not support credential passthrough.
来源:https://docs.microsoft.com/en-us/azure/databricks/data/databricks-file-system#local-file-apis
使用凭据直通选项时存在某些限制,这就是它不起作用的原因。没有语法问题。看到这个offical doc就明白了。