如何处理数据库上的文件

你可以打开文件工作DBFS、集群本地驱动节点、云对象存储、外部位置和在Databricks回购.您可以集成其他系统,但其中许多系统都不提供对Databricks的直接文件访问。

本文的重点是了解与存储在附加到运行集群的临时卷存储中的文件进行交互与存储在DBFS根目录中的文件进行交互之间的区别。您可以直接将DBFS根目录中显示的概念应用到挂载的云对象存储,因为/ mnt目录在DBFS根目录下。如果您拥有所需的特权,大多数示例还可以应用于与云对象存储和外部位置的直接交互。

“数据库”的根路径是什么?

Databricks上的根路径取决于执行的代码。

DBFS root是Spark和DBFS命令的根路径。这些包括:

  • 火花SQL

  • DataFrames

  • dbutils.fs

  • % fs

附加到驱动程序的块存储卷是本地执行的代码的根路径。这包括:

  • % sh

  • 大多数Python代码(不是PySpark)

  • 大多数Scala代码(不是Spark)

请注意

如果您在Databricks Repos中工作,则% sh当前的回收目录。详情请参见以编程方式与工作区文件交互

访问DBFS根目录上的文件

当使用默认为DBFS根目录的命令时,可以使用相对路径或includedbfs: /

选择拼花' <路径>”选择拼花dbfs/<路径>”
df火花负载“<路径>”df保存“<路径>”
dbutilsfs.<命令>“<路径>”
%fs  / . %fs  / . %

当使用默认为驱动程序卷的命令时,必须使用/ dbfs在路径之前。

%sh  /dbfs// . sh
进口操作系统操作系统.<命令>“/ dbfs / <路径>”

访问驱动文件系统上的文件

当使用默认到驱动程序存储的命令时,可以提供相对路径或绝对路径。

%sh  / . sh %sh  / . sh
进口操作系统操作系统.<命令>' / <路径> '

当使用默认为DBFS根目录的命令时,必须使用文件:/

dbutilsfs.<命令>“文件:/ <路径>”
%fs  file:/ . sh

由于这些文件位于附加的驱动程序卷上,而Spark是分布式处理引擎,因此并非所有操作都可以直接访问这里的数据。如果需要将数据从驱动文件系统移动到DBFS,可以使用神奇的命令或Databricks实用程序复制文件。

dbutilsfscp“文件:/ <路径>”“dbfs: / <路径>”
%sh cp / /dbfs/ . sh cp / /dbfs/ . sh
%fs cp file:/ / . sh

通过示例了解默认位置

表格和图表总结并说明了本节中描述的命令以及何时使用每种语法。

命令

默认位置

从DBFS根目录读取

从本地文件系统读取

% fs

DBFS根

添加文件:/到路径

% sh

本地驱动节点

添加/ dbfs到路径

dbutils.fs

DBFS根

添加文件:/到路径

命令操作系统。< >或其他本地代码

本地驱动节点

添加/ dbfs到路径

火花。(读/写)

DBFS根

不支持

文件路径图
# %fs的默认位置是root%fs ls /tmp/ %fs mkdirs /tmp/my_cloud_dir %fs cp /tmp/test_dbfs.txt /tmp/file_b.txt
# dbutils的默认位置Fs是根dbutilsfsls“/ tmp /”dbutilsfs“/ tmp / my_new_file”“这是云存储中的一个文件。”
# %sh的默认位置是本地文件系统%sh ls /dbfs/tmp/ . sh
操作系统命令的默认位置是本地文件系统进口操作系统操作系统listdir“dbfs / tmp /”
#使用%fs和dbutils。fs,you must use file:/ to read from local filesystem%fs ls文件:/tmp %fs mkdirs文件:/tmp/my_local_dir dbutils.fs.ls“文件:/ tmp /”dbutils.fs.put“文件:/ tmp / my_new_file”“这是本地驱动节点上的一个文件。”
# %sh默认从本地文件系统读取%sh ls /tmp

访问挂载对象存储设备上的文件

通过将对象存储挂载到DBFS,可以像访问本地文件系统一样访问对象存储中的对象。

dbutilsfsls“/ mnt / mymount”df火花格式“文本”负载“dbfs: / mymount / my_file.txt”

本地文件API限制

下面列出了在Databricks Runtime中使用DBFS根目录和挂载的本地文件API的限制。

  • 不支持启用客户端加密的Amazon S3挂载。

  • 不支持随机写。对于需要随机写操作的工作负载,请先在本地磁盘上执行操作,然后再将结果复制到本地磁盘/ dbfs.例如:

# python进口xlsxwritershutil进口拷贝文件工作簿xlsxwriter工作簿' / local_disk0 / tmp / excel.xlsx '工作表工作簿add_worksheet()工作表00“关键”工作表01“价值”工作簿关闭()拷贝文件' / local_disk0 / tmp / excel.xlsx '' / dbfs / tmp / excel.xlsx '
  • 没有稀疏文件。要复制稀疏文件,使用cp——稀疏=没有

$ cp稀疏。文件/ dbfs / sparse.fileerror writing“/ dbfs / sparse.file”:操作不支持$ cp——sparse从不稀疏。文件/ dbfs / sparse.file