取消
顯示的結果
而不是尋找
你的意思是:

在json處理數以百萬計的xml文件

Bbren
新的因素

你好,我有一些問題與許多smalls文件的處理和可能的改進和增強。

我們有許多小的xml文件。這些文件是此前由另一個係統處理,使他們在我們datalake,但作為一個額外的步驟包裝最初的json文件中的一些元數據的xml文件。這個json是平的和由jsonl格式。

我們目前使用ADF引發的新文件,然後將它們添加到一個表(dt₁)三角洲湖。這對每個字段表中的一列,其中一個是原始的xml數據。這些xml文件可能非常大,所以這張桌子大約20 m行是150 gb。

此表後一步打開xml字段一個UDF,我們得到一個可用的版本的數據在xml,也如表(DT2)三角洲。問題是,這種最初的表非常緩慢和大三角洲。隻是做一個計數需要5分鍾。目前沒有分區表。我們可以添加,但是除了更快搜索我不確定計數等,幫助其他查詢。我有一個很難找到信息元數據時計算和使用在三角洲湖。

我們已經考慮裝載器但由於DLT是在非常早期階段我們沒有超級喜歡使用這個。額外的問題無法運行的東西交互也似乎是一個無效的結構,但也許我缺少一些東西,這是路要走。任何更好的方法思想是感激。

我們所有的步驟在最初的ADF負載使用pyspark結構化流。運行設置的dt₁DT2大約需要2天與一個相當大的集群,而我們可以處理這些UDF的使用dbutils和python變體與單個節點在一天。似乎有一些基本的經濟放緩,我失蹤pyspark處理。

我很難分析火花UI和理解什麼是發生失敗,正在放緩。這有助於在不知道如何前進。我看著pyspark分析器,但尚未運行它。這可能是有用的雖然看到我期待什麼,那就是UDF是緩慢的,是不會幫助本身。

從dt₁DT2:執行計劃

= = = =物理計劃

*(1)項目(pythonUDF0 # 24304。Col1 Col1 # 24048,……97多個字段)

+ - BatchEvalPython[<λ>(身體# 24021,路徑# 24025)# 24037),(pythonUDF0 # 24304)

+ - InMemoryTableScan(# 24025 # 24021,路徑),假的

+ - InMemoryRelation[身體# 24021,校驗和# 24022,# 24023的格式,id # 24024, # 24025, # 24026大小,時間戳# 24027),StorageLevel(磁盤、內存、反序列化,1副本)

+ - * (1)ColumnarToRow

+ - FileScan鋪(身體# 249,校驗和# 250,# 251的格式,id # 252, # 253, # 254大小,時間戳# 255)分批處理:真的,DataFilters:[],格式:拚花,地點:PreparedDeltaFileIndex(1路)[abfss: / / container@datalake.dfs.core.windows.net/bronz..。PartitionFilters: [], PushedFilters: [], ReadSchema: struct <身體:字符串,校驗和:字符串,格式:字符串,id:字符串,路徑:字符串,大小:int,時間戳:string >

現在看這個,似乎UDF應用的第一步,而不是分割數據,然後應用UDF。這是一種進步嗎?

1接受解決方案

接受的解決方案

匿名
不適用

@Bauke Brenninkmeijer:

聽起來你麵臨一些在你當前的性能和可伸縮性挑戰的過程。這裏有一些想法和建議:

  1. 分區:分區三角洲表絕對可以幫助查詢性能,尤其是對統計查詢。分區表時,火花可以刪除分區不需要閱讀,導致重要的查詢加速。你可以分區三角洲表基於一個經常用於查詢的列(例如,時間戳),或者任何其他適合你的數據的列。
  2. 三角洲湖優化:三角洲湖提供了一些特性,可以幫助與性能和可伸縮性,如三角洲緩存,z值和auto-optimization。三角洲緩存允許緩存頻繁訪問的表在內存或磁盤上更快的查詢性能。δz值有助於組織數據表基於一個特定的列來提高查詢性能。Auto-optimization自動適用於各種優化一個三角洲表來提高查詢性能。
  3. 使用PySpark而非結構化流:聽起來好像你是使用結構化流的處理步驟。雖然結構化流是可以很好地處理實時數據流,它可能不是最有效的解決方案批處理大量的數據。你可以試著用PySpark相反,它提供了更大的靈活性和控製你的處理管道。
  4. 考慮使用磚運行時:如果你沒有使用它,考慮使用磚運行時,這是一個全麵管理和優化版本的Apache火花。磚運行時包含了許多優化與性能和可伸縮性的特性,可以幫助,如三角洲湖集成,自動伸縮,GPU的支持。
  5. 分割數據:有可能分裂的數據然後應用UDF可以提高性能,這取決於您的數據的大小和結構。你可以嚐試使用重新分配方法應用之前把數據分割成較小的分區UDF。
  6. 監控界麵:火花引發UI可以提供寶貴的見解火花的性能的工作。您可以使用火花UI監控執行計劃,識別瓶頸和優化你的查詢。

我希望這些建議可以幫助你優化你的處理管道,提高性能和可伸縮性。

在原帖子查看解決方案

2回答2

匿名
不適用

@Bauke Brenninkmeijer:

聽起來你麵臨一些在你當前的性能和可伸縮性挑戰的過程。這裏有一些想法和建議:

  1. 分區:分區三角洲表絕對可以幫助查詢性能,尤其是對統計查詢。分區表時,火花可以刪除分區不需要閱讀,導致重要的查詢加速。你可以分區三角洲表基於一個經常用於查詢的列(例如,時間戳),或者任何其他適合你的數據的列。
  2. 三角洲湖優化:三角洲湖提供了一些特性,可以幫助與性能和可伸縮性,如三角洲緩存,z值和auto-optimization。三角洲緩存允許緩存頻繁訪問的表在內存或磁盤上更快的查詢性能。δz值有助於組織數據表基於一個特定的列來提高查詢性能。Auto-optimization自動適用於各種優化一個三角洲表來提高查詢性能。
  3. 使用PySpark而非結構化流:聽起來好像你是使用結構化流的處理步驟。雖然結構化流是可以很好地處理實時數據流,它可能不是最有效的解決方案批處理大量的數據。你可以試著用PySpark相反,它提供了更大的靈活性和控製你的處理管道。
  4. 考慮使用磚運行時:如果你沒有使用它,考慮使用磚運行時,這是一個全麵管理和優化版本的Apache火花。磚運行時包含了許多優化與性能和可伸縮性的特性,可以幫助,如三角洲湖集成,自動伸縮,GPU的支持。
  5. 分割數據:有可能分裂的數據然後應用UDF可以提高性能,這取決於您的數據的大小和結構。你可以嚐試使用重新分配方法應用之前把數據分割成較小的分區UDF。
  6. 監控界麵:火花引發UI可以提供寶貴的見解火花的性能的工作。您可以使用火花UI監控執行計劃,識別瓶頸和優化你的查詢。

我希望這些建議可以幫助你優化你的處理管道,提高性能和可伸縮性。

Vidula_Khanna
主持人
主持人

嗨@Bauke Brenninkmeijer

謝謝你發布你的問題在我們的社區!我們很高興幫助你。

幫助我們為您提供最準確的信息,請您花一些時間來回顧反應和選擇一個最好的回答了你的問題嗎?

這也將有助於其他社區成員可能也有類似的問題在未來。謝謝你的參與,讓我們知道如果你需要任何進一步的援助!

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map