我能够与我的Databricks FileStore DBFS
建立连接并访问该文件存储。
可以使用Pyspark读取,写入和转换数据,但是当我尝试使用本地Python API(例如pathlib
或OS
模块)时,我无法超越DBFS文件系统
我可以使用魔术命令:
%fs ls dbfs:\mnt\my_fs\...
可以完美工作并列出所有子目录吗?
但是如果我做os.listdir('\dbfs\mnt\my_fs\')
,它将返回['mount.err']
作为返回值
我已经在新集群上对此进行了测试,结果是相同的
我在带有Apache Spark 2.4.4的Databricks Runtine版本6.1上使用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")
答案 0 :(得分:1)
更新答案:使用Azure Data Lake Gen1存储帐户:dbutils可以访问adls gen1令牌/访问凭据,因此mnt点内的文件列表可以在std py api调用无法访问的情况下使用creds / spark conf,您看到的第一个调用是列出文件夹,并且没有对adls api进行任何调用。
我已经在Databricks Runtime版本6.1(包括Apache Spark 2.4.4,Scala 2.11)中进行了测试
命令按例外方式工作,没有任何错误消息。
更新:内部文件夹的输出。
希望这会有所帮助。您能尝试并告诉我们吗?
答案 1 :(得分:1)
在连接到Azure Generation2存储帐户(无层次名称空间)时,我们遇到了相同的问题。
将Databricks运行时环境从5.5切换到6.x时似乎发生了错误。但是,我们无法查明确切原因。我们假设某些功能可能已被弃用。