Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 尝试访问Azure Databricks中的Azure DBFS文件系统时发生装载错误_Python_Azure_Databricks_Azure Databricks - Fatal编程技术网

Python 尝试访问Azure Databricks中的Azure DBFS文件系统时发生装载错误

Python 尝试访问Azure Databricks中的Azure DBFS文件系统时发生装载错误,python,azure,databricks,azure-databricks,Python,Azure,Databricks,Azure Databricks,我能够建立到我的Databricks文件存储DBFS的连接并访问文件存储 使用Pyspark读取、写入和转换数据是可能的,但当我尝试使用本地Python API(如pathlib或OS模块)时,我无法通过DBFS文件系统的第一级 我可以使用一个神奇的命令: %fs-ls-dbfs:\mnt\my\u-fs\…哪个功能完美,列出了所有子目录 但是如果我执行os.listdir('\dbfs\mnt\my\u fs\')操作,它将['mount.err']作为返回值返回 我已经在一个新集群上测试了这

我能够建立到我的Databricks文件存储
DBFS
的连接并访问文件存储

使用Pyspark读取、写入和转换数据是可能的,但当我尝试使用本地Python API(如
pathlib
OS
模块)时,我无法通过DBFS文件系统的第一级

我可以使用一个神奇的命令:

%fs-ls-dbfs:\mnt\my\u-fs\…
哪个功能完美,列出了所有子目录

但是如果我执行
os.listdir('\dbfs\mnt\my\u fs\')
操作,它将
['mount.err']
作为返回值返回

我已经在一个新集群上测试了这个,结果是一样的

我在Databricks Runtine版本6.1和ApacheSpark 2.4.4上使用Python

有谁能提供建议吗

编辑: 连接脚本:

我使用了Databricks CLI库来存储根据Databricks文档格式化的凭据:

 def initialise_connection(secrets_func):
  configs = secrets_func()
  # Check if the mount exists
  bMountExists = False
  for item in dbutils.fs.ls("/mnt/"):
      if str(item.name) == r"WFM/":
          bMountExists = True
      # drop if exists to refresh credentials
      if bMountExists:
        dbutils.fs.unmount("/mnt/WFM")
        bMountExists = False

      # Mount a drive
      if not (bMountExists):
          dbutils.fs.mount(
              source="adl://test.azuredatalakestore.net/WFM",
              mount_point="/mnt/WFM",
              extra_configs=configs
          )
          print("Drive mounted")
      else:
          print("Drive already mounted")

更新答案:使用Azure Data Lake Gen1存储帐户:dbutils可以访问adls Gen1令牌/access creds,因此mnt point中的文件列表可以工作,因为std py api调用无法访问creds/spark conf,所以您看到的第一个调用是列出文件夹,而它不会对adls api进行任何调用

我已经在Databricks运行时版本6.1中进行了测试(包括ApacheSpark2.4.4和Scala 2.11)

命令按例外情况工作,没有任何错误消息

更新:内部文件夹的输出


希望这有帮助。请尝试并让我们知道。

我们在连接到Azure Generation2存储帐户(没有分级名称空间)时遇到了相同的问题


在将Databricks运行时环境从5.5切换到6.x时,似乎会发生此错误。然而,我们还无法确定这一现象的确切原因。我们假设某些功能可能已被弃用。

当同一个容器装载到工作区中的两个不同路径时,我们遇到了这个问题。全部卸载和重新装载解决了我们的问题。我们使用的是Databricks版本6.2(Spark 2.4.4,Scala 2.11)。我们的blob存储容器配置:

  • 性能/访问层:标准/热
  • 复制:读取访问地理冗余存储(RA-GRS)
  • 账户类型:StorageV2(通用v2)
运行笔记本脚本以卸载
/mnt
中的所有装载:

#迭代所有装载和卸载
打印('卸载以/mnt/'开头的所有装载)
dbutils.fs.mounts()
对于dbutils.fs.mounts()中的装载:
如果mount.mountPoint.startswith('/mnt/'):
dbutils.fs.unmount(mount.mountPoint)
#重新列出所有装载点
打印('重新列出所有装载')
dbutils.fs.mounts()
在自动化作业群集上测试的最小作业 假设您有一个单独的进程来创建挂载。创建作业定义(
job.json
)以在自动化集群上运行Python脚本:

{
  "name": "Minimal Job",
  "new_cluster": {
    "spark_version": "6.2.x-scala2.11",
    "spark_conf": {},
    "node_type_id": "Standard_F8s",
    "driver_node_type_id": "Standard_F8s",
    "num_workers": 2,
    "enable_elastic_disk": true,
    "spark_env_vars": {
      "PYSPARK_PYTHON": "/databricks/python3/bin/python3"
    }
  },
  "timeout_seconds": 14400,
  "max_retries": 0,
  "spark_python_task": {
    "python_file": "dbfs:/minimal/job.py"
  }
}
用于打印挂载的Python文件(
job.py
):

导入操作系统
路径_mounts='/dbfs/mnt/'
打印(f“列出{path_mounts}的内容:”)
打印(os.listdir(路径安装))
path\u mount=路径\u mounts+“YOURCONTAINERNAME”
打印(f“列出{path_mount}的内容:”)
打印(os.listdir(路径安装))
运行databricks CLI命令以运行作业。查看火花驱动程序日志的输出,确认不存在
mount.err

databricks fs mkdirs dbfs:/minimal
databricks fs cp job.py dbfs:/minimal/job.py--覆盖
databricks作业创建——json文件job.json
databricks作业现在运行--作业id

请在问题中添加包含完整错误消息的屏幕截图,好吗?还请共享mountpoint源位置?和DBFSAPI命令哪个有效?感谢您的更新,我将很快对此进行研究。我能够检索文件夹中的文件。这个问题看起来很奇怪。我将在ADLS Gen1存储装载上尝试同样的方法,并检查问题是否仍然存在;tx,谢谢,对我们来说,这是因为Databricks API从5.5版更改为6.0版,也就是说我使用了
dbutils
解决了这个问题,但这并不有趣。我在Gen 2上没有这个问题。