高規模的地理空間與馬賽克處理
2022年5月2日 在Beplay体育安卓版本平台的博客
突破規模障礙(討論現有的挑戰)
在磚,我們高度集中在支持用戶數據現代化之旅。
越來越多的客戶都向我們伸出援手幫助簡化和規模地理beplay体育app下载地址空間分析的工作量。一些想讓我們製定一個完全固執己見的數據體係結構;別人已經開發出定製代碼和依賴關係,他們不想剝離。通常客戶需要beplay体育app下载地址從單節點分布式處理,以滿足規模所提出的挑戰,例如,數據采集的新方法或喂養用機器學習應用程序。
在這種情況下,我們經常看到平台用戶嚐試現有的開源選項處理大地理空間數據。Beplay体育安卓版本這些選項通常有一個陡峭的學習曲線,可以構成挑戰,除非客戶給定的框架已經開發出一種熟悉的部署和使用最佳實踐和模式。beplay体育app下载地址用戶難以實現所需的性能通過現有的地理空間數據工程方法和許多想要靈活地處理空間庫的廣泛的生態係統和合作夥伴。
而設計決策總是tradespace,我們聽過,從我們的客戶建立一個新的地理空間庫稱為馬賽克。beplay体育app下载地址馬賽克的目的是減少摩擦的比例,擴大各種工作負載,以及作為存儲庫為最佳實踐模式在我們開發客戶業務。
在其核心,馬賽克是一個擴展Apache火花™框架,為快速和容易的處理非常大的地理空間數據集。馬賽克提供:
- 地理空間數據工程方法,獨特的利用的力量三角洲湖磚,而剩下的靈活使用與其他庫和合作夥伴
- 通過實現高性能的火花在核心馬賽克功能代碼生成
- 許多[標準的SQL (ST_)函數空間作為引發表達式轉換,實現聚合和加入空間數據集
- 大規模優化執行空間連接
- 簡單常見的空間數據之間的轉換編碼如WKT WKB GeoJSON
- 構造函數輕鬆地生成新的幾何圖形從引發本地數據類型和轉換到JTS拓撲套件(JTS)和環境係統研究所(Esri幾何類型)
- 在Scala中,選擇SQL和Python api
擁抱的生態係統
之間的馬賽克是它符合我們的想法火花和δ一邊和其他現有的生態係統在另一邊。我們設想馬賽克作為圖書館帶來將地理空間功能集成到係統的知識能夠受益於高水平的並行性。流行的框架,如Apache塞多納或GeoMesa仍然可以使用與馬賽克,甚至使其靈活、強大的選擇作為一個增加到現有的架構。
另一方麵,設計的係統,而不需要另外地理空間與鑲嵌工具可以遷移到數據架構,因此利用高可伸縮性和性能以最小的努力由於支持多種語言和一個統一的api。的附加值,因為馬賽克自然坐在Lakehouse架構之上,它可以解鎖AI /毫升和先進的分析功能的地理空間數據平台。Beplay体育安卓版本
最後,解決方案就像紙箱重量、GeoServer MapBox等可以保持你的架構的一個組成部分。馬賽克旨在帶給你的設計和架構的性能和可伸縮性。可視化和交互式地圖應該委托給解決方案更好的適合處理這種類型的交互。我們的目標是不要重新發明輪子,而是解決差距我們已確定,是失蹤的馬賽克瓷磚。
使用經過驗證的模式
馬賽克已經出現的庫存運動捕獲所有的有用的建立起我們建立地理空間模式來解決磚客戶的問題。beplay体育app下载地址這個過程的輸出顯示有重要的價值意識到通過創建一個框架包這些模式,允許客戶直接雇用他們。beplay体育app下载地址
你甚至可以說馬賽克是一個馬賽克領域我們已經識別出的最佳實踐。
我們有另一個原因選擇我們的框架。馬賽克的基礎是我們討論的技術博客與陸地測量部合著和微軟,我們選擇使用一個潛在的層次空間索引係統幾何圖形表示為一個網格,使其可行的複雜多邊形表示為位圖和局部矢量表示。
激勵用例的這種方法最初是通過應用驗證BNG英國,一個基於網格空間索引係統分區幾何相交問題(如點包容連接)。雖然我們第一次通過應用這項技術取得了很好的結果和性能對於其預期的應用程序,實現所需的重要適應為了推廣一套更廣泛的問題。
這就是為什麼在馬賽克選擇替代H3BNG空間索引係統,可能對其他指標在未來基於客戶需求的信號。H3是一個全球性的層次指標體係映射規則六邊形整數id。從本質上說,六邊形提供優於其他形狀,如保持準確性和允許我們利用固有的指標體係結構計算近似距離。H3附帶一個API有錢複製鑲嵌的方法,作為額外的獎勵,它集成了本地的KeplerGL庫可以是一個巨大的推動者呈現空間內容涉及開發磚筆記本的內部環境的工作流。
馬賽克的設計適用於任何層次空間索引係統,形成一個完美的分區的空間。我們稱這裏為一個完美的空間的分區有兩個要求:
- 沒有重疊指數在給定的決議
- 成套指數在給定分辨率形式一個信封在觀察空間
如果這兩個條件都滿足我們可以計算pseudo-rasterization方法,與傳統的光柵化,操作是可逆的。馬賽克公開API,允許多個索引策略:
- 指數保持幾何作為一個額外的列
- 在衛星表索引分開
- 爆炸最初通過幾何鑿或mosaic-ing表的索引
這些方法可以在不同的情況下提供福利。我們相信最好的性能和易用性之間的權衡是原始表爆炸。雖然這表中的行數增加,這種方法解決了within-row傾斜和最大化利用z值和布魯姆過濾器技術的機會。此外,由於簡單的幾何圖形存儲在每一行,所有地理空間謂詞將運行得更快,因為他們會操作簡單的局部幾何表示。
這篇文章的重點是在索引的鑲嵌方法策略,利用三角洲湖。三角洲湖有一些非常有用的功能在處理大數據在高卷,它有助於引發工作負載實現最佳性能。z值三角洲是一個非常重要的特性進行地理空間數據地理空間信息係統工程和建築。簡而言之,Z順序組織存儲數據的方式最大化的數據量查詢服務時可以跳過。
地理空間數據集有一個統一的特性:它們代表位於物理世界的概念。通過應用適當的z值策略,我們可以確保數據物理上配置也將集中的存儲。這是有利的位置查詢服務時高。很多地理空間查詢目標返回相關數據有限的當地或co-processing數據點接近彼此,而不是那些遠。
這就是索引係統(比如H3很有用。H3 id在給定分辨率索引值接近對方,如果他們在接近真實世界的距離。這使得H3 id一個完美的候選人使用與三角洲湖的z值。
地理空間數據磚簡單
今天,龐大的數據量處理需要解決業務需求是呈指數增長的。兩個的後果是顯而易見的- 1)再也數據不符合一個單獨的機器,2)組織實施現代數據棧基於關鍵應用雲計算技術。
Lakehouse架構和支持技術,如火花和三角洲現代數據棧的基本組件,幫助在解決這些新的挑戰世界上極大的數據。然而,當涉及到使用這些工具來運行大規模連接高度複雜的幾何圖形,這為許多用戶仍然可以是一個艱巨的任務。
馬賽克磚旨在將簡單地理空間處理,包括概念,傳統上由多個框架和終端用戶通常是隱藏的,因此通常限製用戶完全控製係統的能力。其目的是提供一個模塊化係統,可以滿足不斷變化的用戶需求,而應用核心地理空間數據工程技術作為基線進行後續處理,分析和可視化。馬賽克支持使用JTS或Esri幾何圖形的運行時表示類型。記住簡單馬賽克為工作帶來一個統一的抽象幾何圖形包和最優設計api使用數據集的火花。統一非常重要,因為這兩個包之間切換(都有他們的優點和缺點,適合不同的用例)不應該是一項複雜的任務,它不應該影響你建立你的查詢。
% python從馬賽克進口enable_mosaicspark.conf。集(“spark.databricks.mosaic.geometry.api”,“JTS”)dbutils enable_mosaic(火花)
left_df.join (right_df,= (“h3_index”),如何=“內心”).groupBy (關鍵).count ()
圖6:使用H3和JTS馬賽克查詢
% python從馬賽克進口enable_mosaicspark.conf。集(“spark.databricks.mosaic.geometry.api”,“獨立”)dbutils enable_mosaic(火花)
left_df.join (right_df,= (“h3_index”),如何=“內心”).groupBy (關鍵).count ()
圖7:查詢使用H3和Esri馬賽克
上麵的方法旨在允許JTS之間輕鬆切換或Esri幾何包不同的任務,雖然不是在同一和筆記本。我們強烈建議您使用一個馬賽克背景在一個筆記本和/或管道的一步。
將索引模式與易於使用的api geo-related查詢和轉換解鎖全部潛能的大規模係統通過集成與火花和三角洲。
%pythondf=df.withColumn (“指數”,mosaic_explode(坳(“形狀”)))df.write.format(“δ”).save(位置)%sql創建表table_name使用δ位置的位置
優化table_nameZORDER通過(index.h3)
圖8:馬賽克爆炸結合δz值
這pseudo-rasterization方法允許我們快速切換之間高速連接與精度公差精度高連接通過簡單介紹或排除一個WHERE子句。
% python#點陣查詢#快但不精確left_df.join (right_df,= (“index.h3”),如何=“內心”).groupBy (關鍵).count ()
圖9:馬賽克查詢隻使用索引
% python#詳細查詢#慢但更精確left_df.join (right_df,= (“index.h3”),如何=“內心”)。(坳(“is_core”)| |st_contains(坳(“芯片”)、坳(“點”))).groupBy (關鍵).count ()
圖10:馬賽克查詢使用芯片的細節
我們為什麼選擇這種方法?簡單有許多方麵,另一個經常被忽視的是明確的代碼的性質。顯式幾乎總是比隱式。在WHERE子句確定行為而不是使用配置值會導致更多的交際代碼和代碼的簡單解釋。此外,代碼的行為保持一致和可複製的複製代碼在工作區甚至平台。Beplay体育安卓版本
最後,如果您的現有解決方案利用H3功能,和你不希望重組數據,馬賽克仍然可以通過簡化你的地理空間管道提供實質性的價值。馬賽克H3功能支持本地的一個子集。
% pythondf.withColumn (“指標”,polyfill(坳(“形狀”)))
圖11:馬賽克查詢polyfill的形狀
% pythondf.withColumn (“指數”,point_index_geom(坳(“點”)))
圖12:馬賽克查詢點指數
加快創新步伐
我們的主要動機鑲嵌在更廣泛的生態係統是簡單和集成;然而,這種靈活性意味著小如果我們不保證性能和計算能力。評估馬賽克對2主要操作:點在多邊形連接和多邊形交叉連接。除了我們評估預期性能的索引階段。對於用例我們預先索引和δ表存儲數據。我們已經運行操作使用ZORDER優化之前和之後都強調三角洲可以帶來的好處你的地理空間處理工作。
polygon-to-polygon加入,我們專注於polygon-intersects-polygon關係。這種關係返回一個布爾標誌代表兩個多邊形相交的事實。我們運行這個基準H3決議7,8和9,和數據集從20萬多邊形500萬多邊形。
當我們比較運行7和8號決議,我們觀察到,加入平均有一個更好的運行時間和分辨率8。最引人注目的是500萬年的最大工作負載多邊形對500萬年加入多邊形分辨率在15億場比賽跑在短短2小時8決議雖然花了3小時在決議7。選擇正確的分辨率是一個重要的任務。如果我們選擇一個決議,太粗(低分辨率)我們低估風險幾何形狀導致幾何數據傾斜的情況下沒有解決,性能將會降低。如果我們選擇太詳細的決議(高分辨率數字)我們風險over-representing幾何形狀導致數據爆炸率高和性能將會降低。驚人的平衡是至關重要的,在我們的基準測試運行時優化~ 30%這突顯出重要有一個相應的決議。頂點的平均數量在我們的數據集的範圍從680年到690年每形狀節點——證明馬賽克方法可以處理大量的複雜形狀。
當我們增加了解決9我們觀察到的性能下降,這是由於代表問題——每個多邊形使用太多的指標會導致太多的時間浪費在解決指數匹配,並將拖慢整體性能。這就是為什麼我們有能力添加到馬賽克,將分析你的數據集和表明你所需數量的分布指數多邊形。
% python從馬賽克進口MosaicAnalyzer
分析儀= MosaicAnalyzer ()optimal_resolution = analyzer.get_optimal_resolution (geoJsonDF,“幾何”)optimal_resolution
圖14:確定最優分辨率馬賽克
整套的標準請參考馬賽克文檔頁麵我們討論業務的全麵運行並提供一個廣泛的分析結果。
建立一個用例的阿特拉斯
馬賽克我們取得的平衡性能,表達能力和簡單。和這樣的平衡我們鋪平了道路構建端到端現代的用例,可伸縮的,準備未來磚產品的投資和合作夥伴關係在地理空間的生態係統。我們正在與客戶在多個垂直行業中,我們已經beplay体育app下载地址確定了許多鑲嵌在現實世界的應用領域。在接下來的幾個月我們將構建解決方案加速器,教程和用法的例子。馬賽克github庫將包含所有這些內容連同現有的和後續代碼版本。你可以很容易地訪問馬賽克筆記本的例子使用磚回購現代地理空間數據平台,啟動你的——請繼續關注更多的內容!Beplay体育安卓版本
開始
試穿馬賽克磚在今天Lakehouse,加速你的地理空間分析聯係我們了解更多關於我們如何幫助客戶提供類似的用例。beplay体育app下载地址