想象以下設置:
我有日誌文件存儲為JSON文件分區年、月、日和小時身體上的文件夾:
”“”/ logs |——年= 2020 | = 2021年”——年= 2022 |——月= 01 '——月= 02 | = 01 |——天=…”——天= 13小時= 0000 | |,小時=…”——小時= 0900 | log000001。json |——<許多文件>“log000133。json”“”“
火花支持分區發現這樣的文件夾結構(“所有內置文件來源(包括文本/ CSV / JSON /獸人/拚花)能夠發現和推斷分區信息自動”https://spark.apache.org/docs/latest/sql-data-sources-parquet.html partition-discovery)。
然而,鑲花的文件相比,我發現火花不使用該元數據信息分區修剪/分區消除當讀取JSON文件。
在我用例我隻是感興趣從一個特定的時間窗口(見日誌過濾器
(火花.read .format (json) .load (/ logs) .filter(= = 2022年和月02和天= 13小時= 0900))
我認為激發能應用分區列的過濾器“早期”,隻有掃描文件夾匹配過濾器(例如火花不需要掃描文件夾和讀取文件在/日誌/年= 2020)。
然而,在實踐中我的查詢的執行需要大量的時間。看起來我好像火花首先掃描整個文件係統開始的/日誌讀取所有文件,然後應用過濾器(已經)讀取數據。由於嵌套文件夾結構和大量的文件夾/文件這是非常昂貴的。
顯然火花不壓低過濾器(適用於分區修剪/分區消除)。
對我來說,這是奇怪的行為不同於拚花處理JSON文件。
這是像設計的那樣或者一個錯誤嗎?
現在,我最終實現分區修剪自己在預處理步驟中使用dbutils.fs.ls掃描迭代“正確”的文件夾和組裝一個顯式的文件列表,然後我通過火花讀取命令。
嗨@Martin b,磚,Community Edition的用戶,可以獲得更多的能力和獲得產品級升級他們的訂閱功能完整的磚平台Beplay体育安卓版本。升級,14天免費試用注冊或聯係我們。
完整的磚平台提供的Beplay体育安卓版本產品級功能,比如一個無限數量的集群規模迅速上升或下降,啟動工作,合作,先進的安全控製,和專家的支持。它幫助用戶處理數據規模或構建Apache火花™應用程序在一個團隊中設置。