如何處理數據庫上的文件
你可以打開文件工作DBFS、集群的本地驅動節點、雲對象存儲、外部位置等在磚回購.您可以集成其他係統,但其中許多係統不提供對Databricks的直接文件訪問。
本文的重點是理解與存儲在附加到運行集群的臨時卷存儲中的文件交互與存儲在DBFS根目錄中的文件交互之間的區別。您可以直接將DBFS根目錄中所示的概念應用到已掛載的雲對象存儲中,因為/ mnt
目錄在DBFS根目錄下。如果您擁有所需的特權,大多數示例也可以應用於與雲對象存儲和外部位置的直接交互。
Databricks的根路徑是什麼?
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.<命令>(“<路徑>”)
% f <命令> / <路徑>
當使用默認為驅動卷的命令時,必須使用/ dbfs
前路。
% sh <命令> / dbfs / <路徑> /
進口操作係統操作係統.<命令>(“/ dbfs / <路徑>”)
訪問驅動文件係統中的文件
在使用默認為驅動程序存儲的命令時,可以提供相對路徑或絕對路徑。
% sh <命令> / <路徑>
進口操作係統操作係統.<命令>(' / <路徑> ')
當使用默認為DBFS根目錄的命令時,必須使用文件:/
.
dbutils.fs.<命令>(“文件:/ <路徑>”)
% f <命令>文件:/ <路徑>
因為這些文件位於附加的驅動程序卷上,而且Spark是分布式處理引擎,所以不是所有操作都可以直接訪問這裏的數據。如果需要將數據從驅動文件係統移動到DBFS,可以使用magic命令或Databricks實用程序複製文件。
dbutils.fs.cp(“文件:/ <路徑>”,“dbfs: / <路徑>”)
%sh cp /<路徑> /dbfs/<路徑> . sh cp /<路徑> /dbfs/<路徑> . sh
%fs cp文件:/<路徑> /<路徑>
用示例理解默認位置
該表和圖表總結並說明了本節中描述的命令以及何時使用每種語法。
命令 |
默認位置 |
從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 . %fs ls /tmp/ %fs mkdirs /tmp/my_cloud_dir
# dbutils的默認位置。fs是根dbutils.fs.ls(“/ tmp /”)dbutils.fs.把(“/ tmp / my_new_file”,“這是雲存儲中的一個文件。”)
%sh的默認位置是本地文件係統% sh ls / dbfs / tmp /
操作係統命令的默認位置是本地文件係統進口操作係統操作係統.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中使用FUSE使用本地文件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——稀疏=從不稀疏。文件/ dbfs / sparse.file