如何使用Databricks上的文件
你可以打開文件工作DBFS,集群的本地驅動節點,雲對象存儲,外部位置,和在磚回購。您可以集成其他係統,但其中許多係統不提供對Databricks的直接文件訪問。。
本文的重點是理解與存儲在附加到運行集群的臨時卷存儲中的文件交互與存儲在DBFS根目錄中的文件交互之間的區別。您可以直接將為DBFS根所展示的概念應用到掛載的雲對象存儲中,因為/ mnt
目錄在DBFS根目錄下。如果您擁有所需的特權,大多數示例也可以應用於與雲對象存儲和外部位置的直接交互。
Databricks的根路徑是什麼?
Databricks上的根路徑取決於執行的代碼。
DBFS根是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/
%fs cp file:/<路徑> /<路徑>
用例子理解默認位置
表格和圖表總結並說明了本節中描述的命令以及何時使用每種語法。
命令 |
默認位置 |
從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 /
# os命令的默認位置是本地文件係統進口操作係統操作係統。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的限製。
不支持啟用客戶端加密的Amazon S3掛載。
不支持隨機寫。對於需要隨機寫的工作負載,請先在本地磁盤上執行操作,然後將結果複製到
/ 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