想象以下設置:
我有日誌文件存儲為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掃描迭代“正確”的文件夾和組裝一個顯式的文件列表,然後我通過火花讀取命令。
嗨@Kaniz開羅,
是的,我做到了。這一次不再顯示錯誤。
但隨著你的鏈接//www.eheci.com/feedback我最終在著陸頁社區工作空間;我的預期反饋信息門戶。
我的工作區,在“幫助”還有另一個“反饋”按鈕:
但這隻是mailto鏈接地址feedback@www.eheci.com。
這是為了使特性請求嗎?