如何處理數據庫上的文件
你可以打開文件工作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.寫.保存(“<路徑>”)
dbutils.fs.<命令>(“<路徑>”)
%fs / . %fs / . %
當使用默認為驅動程序卷的命令時,必須使用/ dbfs
在路徑之前。
%sh /dbfs// . sh
進口操作係統操作係統.<命令>(“/ dbfs / <路徑>”)
訪問驅動文件係統上的文件
當使用默認到驅動程序存儲的命令時,可以提供相對路徑或絕對路徑。
%sh / . sh %sh / . sh
進口操作係統操作係統.<命令>(' / <路徑> ')
當使用默認為DBFS根目錄的命令時,必須使用文件:/
.
dbutils.fs.<命令>(“文件:/ <路徑>”)
%fs file:/ . sh
由於這些文件位於附加的驅動程序卷上,而Spark是分布式處理引擎,因此並非所有操作都可以直接訪問這裏的數據。如果需要將數據從驅動文件係統移動到DBFS,可以使用神奇的命令或Databricks實用程序複製文件。
dbutils.fs.cp(“文件:/ <路徑>”,“dbfs: / <路徑>”)
%sh cp / /dbfs/ . sh cp / /dbfs/ . sh
%fs cp file:/ / . sh
通過示例了解默認位置
表格和圖表總結並說明了本節中描述的命令以及何時使用每種語法。
命令 |
默認位置 |
從DBFS根目錄讀取 |
從本地文件係統讀取 |
---|---|---|---|
|
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是根dbutils.fs.ls(“/ tmp /”)dbutils.fs.把(“/ 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,可以像訪問本地文件係統一樣訪問對象存儲中的對象。
dbutils.fs.ls(“/ mnt / mymount”)df=火花.讀.格式(“文本”).負載(“dbfs: / mymount / my_file.txt”)
本地文件API限製
下麵列出了在Databricks Runtime中使用DBFS根目錄和掛載的本地文件API的限製。
沒有憑證傳遞。
沒有隨機寫入。對於需要隨機寫操作的工作負載,請先在本地磁盤上執行操作,然後再將結果複製到本地磁盤
/ dbfs
.例如:
# python進口xlsxwriter從shutil進口拷貝文件工作簿=xlsxwriter.工作簿(' / local_disk0 / tmp / excel.xlsx ')工作表=工作簿.add_worksheet()工作表.寫(0,0,“關鍵”)工作表.寫(0,1,“價值”)工作簿.關閉()拷貝文件(' / local_disk0 / tmp / excel.xlsx ',' / dbfs / tmp / excel.xlsx ')
沒有稀疏文件。要複製稀疏文件,使用
cp——稀疏=沒有
:
$ cp稀疏。文件/ dbfs / sparse.fileerror writing“/ dbfs / sparse.file”:操作不支持$ cp——sparse=從不稀疏。文件/ dbfs / sparse.file