如何检查databricks中是否已存在目录

Sur*_*aja 5 azure databricks azure-databricks

如何检查databricks中是否已经存在

dir = "/mnt/published/omega/omega_output"
if(dbutils.fs.exists(dir)):
 print("dir exists")
else:
 print("dir does not exists")
Run Code Online (Sandbox Code Playgroud)

这段代码向我抛出错误

'FSHandler' object has no attribute 'exists'
Run Code Online (Sandbox Code Playgroud)

Ale*_*Ott 5

exists中没有这个功能dbutils.fs。有几种方法可以解决这个问题:

  1. 使用本地文件 API - 它仅适用于已安装的资源。您需要附加/dbfs到路径:
import os
dir = '/mnt/....'
if os.path.exists(f"/dbfs{dir}"):
  ....
Run Code Online (Sandbox Code Playgroud)
  1. 使用 Hadoop 文件 API - 它将与dbfs:/, abfss:/, ...一起使用
URI           = sc._gateway.jvm.java.net.URI
Path          = sc._gateway.jvm.org.apache.hadoop.fs.Path
FileSystem    = sc._gateway.jvm.org.apache.hadoop.fs.FileSystem
Configuration = sc._gateway.jvm.org.apache.hadoop.conf.Configuration

dir = "..."
fs = FileSystem.get(URI(dir), Configuration())

if fs.exists(Path(dir)):
  ...
Run Code Online (Sandbox Code Playgroud)
  1. 尝试列出路径,并在文件不存在或不可访问时捕获异常。主要问题 - 您无法区分不存在的文件/目录和您没有访问权限的文件/目录:
def file_exists(dir):
  try:
    dbutils.fs.ls(dir)
  except:
    return False  
  return True
Run Code Online (Sandbox Code Playgroud)