編輯

共用方式為


使用 Azure Synapse Analytics 進行太空數據分析

Azure Synapse Analytics
Azure AI 服務
Azure 電腦視覺
Azure Batch
Azure 儲存體

此架構旨在顯示端對端實作,其牽涉到搭配 Azure Synapse Analytics 使用地理空間連結庫和 AI 模型來擷取、載入、轉換和分析空間數據。 本文也會說明如何整合地理空間特定的 Azure 認知服務 模型、來自合作夥伴的 AI 模型、自備數據,以及使用 Azure Synapse Analytics 的 AI 模型。 本文件的目標物件是使用地理空間或太空數據時具有中繼技能等級的使用者。

此架構的實作可於 GitHub 取得。

Apache、Apache® Spark、Spark、Spark 標誌、Apache Sedona、Apache 孵化器、Apache 羽毛標誌和 Apache 孵化器項目標誌是 美國 和/或其他國家/地區 Apache Software Foundation 的註冊商標或商標。 使用這些標記不會隱含 Apache Software Foundation 的背書。

架構

顯示地理空間處理分析解決方案的圖表。

下載此架構的 Visio 檔案

資料流程

下列各節說明架構中的階段。

資料提取

太空數據是從空客NAIP/USDA(透過行星電腦 API)Maxar 等數據源提取。 數據會內嵌至 Azure Data Lake Storage

Azure Synapse Analytics 提供各種管線和活動,例如 Web 活動、數據流活動和自定義活動,以連線到這些來源,並將數據複製到 Data Lake Storage。

Azure Synapse 自定義活動會在虛擬機的 Azure Batch 集區或 Docker 相容容器執行自定義的程式代碼邏輯。

資料轉換

數據會處理並轉換成分析師和 AI 模型可取用的格式。 地理空間連結庫,包括 GDAL、OGR、Rasterio 和 GeoPandas,都可用來執行轉換。

Azure Synapse Spark 集區可讓您設定和使用這些連結庫來執行數據轉換。 您也可以使用使用 Azure Batch 集區的 Azure Synapse 自定義活動。

Azure Synapse Notebook 是一種 Web 介面,可用來建立包含即時程式代碼、視覺效果和敘事文字的檔案。 筆記本是驗證想法、定義轉換,並執行快速實驗以取得數據見解並建置管線的好位置。 在範例程式代碼中,GDAL 連結庫會在 Spark 集區中使用來執行資料轉換。 如需詳細資訊,請參閱 本文的範例程式代碼 一節。

此範例解決方案會從此數據轉換步驟實作此管線。 此範例是以假設數據是由稍早所述的數據擷取方法複製 Data Lake Storage 所撰寫。 它示範此管線的實作以進行點陣數據處理。

AI 模型的分析和執行

Azure Synapse 筆記本環境會分析並執行 AI 模型。

使用認知服務 自訂視覺 模型、在自己的環境中定型,以及封裝為 Docker 容器的 AI 模型,可在 Azure Synapse 環境中取得。

在 Azure Synapse 環境中,您也可以執行可從合作夥伴取得的各種功能的 AI 模型,例如物件偵測、變更偵測和土地分類。 這些模型會在自己的環境中定型,並封裝為 Docker 容器。

Azure Synapse 可以透過自訂活動來執行這類 AI 模型,以可執行檔或 Docker 容器的形式在 Batch 集區中執行程式碼。 此範例解決方案示範如何在 Azure Synapse 管線中執行 自訂視覺 AI 模型,以針對特定地理空間區域進行物件偵測。

分析后和視覺效果

  • 如需進一步分析和視覺效果,AI 模型的分析和執行輸出可以儲存在 Data Lake Storage、數據感知資料庫,例如 適用於 PostgreSQL 的 Azure 資料庫 或 Azure Cosmos DB。 此範例解決方案示範如何轉換 AI 模型輸出,並將其儲存為 Data Lake Storage 和 適用於 PostgreSQL 的 Azure 資料庫 中的 GeoJSON 數據。 您可以從該處擷取和查詢輸出。
  • 針對視覺效果:
    • 您可以使用 ArcGIS Desktop 之類的授權工具,或 QGIS 之類的開放原始碼工具。
    • 您可以使用 Power BI 從各種資料源存取 GeoJSON,並將地理資訊系統 (GIS) 資料可視化。
    • 您可以使用用戶端地理空間 JavaScript 連結庫,將 Web 應用程式中的數據可視化。

元件

資料來源

資料提取

  • Azure Synapse Analytics 是一項無限制的分析服務,可將資料整合、企業資料倉儲和巨量資料分析整合在一起。 Azure Synapse 包含與 Azure Data Factory 相同的 資料整合 引擎和體驗,因此您可以在不離開 Azure Synapse 的情況下大規模建立 ETL 管線。
  • Azure Data Lake Storage 是內建於 Azure Blob 儲存體的巨量資料專屬功能。
  • Azure Batch 可讓您在 Azure 上執行和調整大量批次運算作業。 Batch 工作可以直接在 Batch 集區中的虛擬機(節點)上執行,但您也可以設定 Batch 集區,以在節點上的 Docker 相容容器執行工作。
    • Azure Synapse 自定義活動會在虛擬機的 Azure Batch 集區或 Docker 容器中執行自定義的程式代碼邏輯。
  • Azure 金鑰保存庫 儲存及控制對令牌、密碼和 API 金鑰等秘密的存取。 Key Vault 也建立和控制加密金鑰,並管理安全性憑證。

資料轉換

下列地理空間連結庫和套件會一起使用進行轉換。 這些連結庫和套件會安裝在無伺服器 Spark 集區中,然後附加至 Azure Synapse Notebook。 如需安裝連結庫的資訊,請參閱 本文稍後的在 Azure Synapse Spark 集區中安裝地理空間套件。

  • 地理空間連結庫
    • GDAL 是用來操作衛星資料的工具庫。 GDAL 適用於點陣和向量資料類型。 非常適合用來了解您是否正在使用衛星資料。
    • Rasterio 是用於點陣處理的模組。 您可以將其用於在 Python 中讀取和寫入數種不同的點陣格式。 Rasterio 是以 GDAL 為基礎。 匯入模組時,Python 會自動註冊所有已知的 GDAL 驅動程式來讀取支援的格式。
    • GeoPandas 是開放原始碼專案,可讓您更輕鬆地在 Python 中使用太空數據。 GeoPandas 擴充 Pandas 所使用的數據類型,以允許幾何類型的空間作業。
    • Shapely 是一種 Python 套件,用於設定定理分析和操作平面功能。 Shapely 會 (透過 Python 的 ctypes 模組) 使用廣泛部署 GEOS 程式庫中的函式。
    • pyproj 會執行製圖轉換。 並使用 PROJ,從經度和緯度轉換成原生地圖投影 x、y 座標,反之亦然。
  • Azure Batch 可讓您在 Azure 上執行和調整大量批次運算作業。
  • Azure Synapse Notebook 是一種 Web 介面,可用來建立包含即時程式代碼、視覺效果和敘述文字的檔案。 您可以使用 Notebook 活動,將現有的 Azure Synapse Notebook 新增至 Azure Synapse 管線。
  • Apache Spark 集 區可讓您設定及使用連結庫來執行資料轉換。 您可以使用 Spark 作業定義活動,將現有的 Spark 作業新增至 Azure Synapse 管線。

分析和 AI 模型

  • Azure Synapse 提供機器學習功能。
  • Azure Batch 可讓您在 Azure 上執行和調整大量批次運算作業。 在此解決方案中,Azure Synapse 自定義活動可用來在 Azure Batch 集區上執行 Docker 型 AI 模型。
  • Azure 認知服務 可讓您將視覺內嵌至您的應用程式。 您可以使用認知服務的元件 自訂視覺,針對特定領域自定義和內嵌最先進的電腦視覺影像分析。
  • 您也可以使用自備 AI 模型,以及 Microsoft 合作夥伴 AI 模型,例如 blackshark.ai

分析后和視覺效果連結

  • 適用於 PostgreSQL 的 Azure 資料庫 是專為超大規模資料庫工作負載設計的完全受控關係資料庫服務。 它透過 PostGIS 延伸模組支援太空資料。
  • Azure Cosmos DB 支援對 GeoJSON表示的地理空間點數據編製索引和查詢。
  • Power BI 是用於建置報表和儀錶板的互動式數據視覺效果工具。 您可以從 Esri ArcGIS Maps 取得太空數據見解。
  • QGIS 是免費的開放原始碼GIS,可用來建立、編輯、可視化、分析及發佈地理空間資訊。
  • ArcGIS Desktop 是由 Esri 提供的授權產品。 您可以使用它來建立、分析、管理及共用地理資訊。

替代項目

如果您想要執行可從 Azure Synapse 呼叫的容器化 AI 模型,您可以使用 Azure Kubernetes ServiceAzure 容器執行個體Azure Container Apps

Azure Databricks 提供裝載分析管線的替代方案。

Azure HDInsight 中的Spark提供在Apache Spark環境中使用地理空間連結庫的替代方案。

以下是可用於空間資料處理的一些替代連結庫和架構:

  • Apache Sedona,前身為 GeoSpark,是一種叢集運算系統,用於處理大規模的空間數據。 Sedona 使用現用的空間復原分散式數據集和 SpatialSQL 擴充 Spark 和 Spark SQL,以有效率地跨機器載入、處理和分析大規模空間數據。
  • Dask for Python 是可調整現有 Python 生態系統的平行運算連結庫。

案例詳細資料

太空數據收集越來越常見。 為了應用人工智慧,機器學習需要儲存的數據封存。 建立雲端式數據分析解決方案的需求變得更加重要,讓企業和政府能夠推動更明智的商業和戰術決策。

潛在使用案例

此解決方案適用於航空航太和飛機產業。 其可解決這些案例:

  • 點陣數據擷取和處理
  • 透過預先定型的 AI 模型進行物件偵測
  • 透過 AI 模型分類土地品質
  • 透過 AI 模型監視環境中的變更
  • 預先處理影像集的衍生數據集
  • 向量視覺效果 /小面積耗用量
  • 向量數據篩選和跨數據聯結

考量

這些考量能實作 Azure Well-Architected Framework 的支柱,其為一組指導原則,可以用來改善工作負載的品質。 如需更多資訊,請參閱 Microsoft Azure 結構完善的架構

卓越營運

如果您使用 Git 進行原始檔控制共同作業,您可以使用 Synapse Studio 將工作區與 Git 存放庫、Azure DevOps 或 GitHub 產生關聯。 有關詳細資訊,請參閱 Synapse Studio中的原始檔控制。

  • 在 Azure Synapse 工作區中,CI/CD 會將所有實體從一個環境(開發、測試、生產)移至另一個環境。
  • 您可以使用 Azure DevOps 發行管線和 GitHub Actions,將 Azure Synapse 工作區部署至多個環境自動化。

效能

  • Azure Synapse 支援 Apache Spark 3.1.2,其效能優於其前身。
  • 如需Spark集區調整和節點大小的相關信息,請參閱 Azure Synapse Analytics 中的Spark集區。
  • 透過 Azure Batch,您可以相應放大內部平行處理在 Azure Synapse 自定義活動中提交的轉換。 Azure Batch 支援特製化的 GPU 優化 VM 大小,可用來執行 AI 模型。

可靠性

可靠性可確保您的應用程式符合您對客戶的承諾。 如需詳細資訊,請參閱可靠性支柱的概觀 (部分機器翻譯)。

如需 SLA 資訊,請參閱 Azure Synapse SLA

安全性

安全性可提供保證,以避免刻意攻擊和濫用您寶貴的資料和系統。 如需詳細資訊,請參閱安全性支柱的概觀

如需安全性最佳做法,請參閱下列文章:

成本最佳化

成本最佳化是關於考慮如何減少不必要的費用,並提升營運效率。 如需詳細資訊,請參閱成本最佳化支柱的概觀

這些資源提供定價和成本優化的相關信息:

注意

如需合作夥伴 AI 模型的定價和授權條款,請參閱合作夥伴的檔。

部署此案例

範例解決方案的 Bicep 部署可供使用。 若要開始使用此部署,請參閱 這些指示

此圖表示範已部署範例解決方案的架構。

下載此架構的 Visio 檔案

限制

此架構示範使用 Azure Synapse 的端對端地理處理和分析解決方案。 此範例實作的目標是感興趣的小型到中型區域,以及點陣數據的並行地理處理有限。

範例指令碼

下列指示說明如何使用 Synapse 筆記本,將轉換讀取、寫入和套用至儲存在 Azure Data Lake Storage 中的點陣數據。 意圖在於示範 Synapse 筆記本中的連結庫使用,而不是示範轉換。

必要條件

指示

  • 從點陣資料列印資訊:

    from osgeo import gdal
    gdal.UseExceptions()
    access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key)
    dataset_info = gdal.Info('/vsiadls/aoa/input/sample_image.tiff')  #/vsiadls/<container_name>/path/to/image
    print(dataset_info)
    

    注意

    /vsiadls/ 是文件系統處理程式,可讓您即時隨機讀取 Azure Data Lake Storage 檔案系統中可用的主要非公用檔案。 不需要下載整個檔案。 /vsiadls/ 類似於 /vsiaz/。 它會使用相同的組態選項進行驗證。 不同於 /vsiaz//vsiadls/ 提供真正的目錄管理和 Unix 樣式 ACL 支援。 針對某些功能,必須在 Azure 記憶體中開啟階層式支援。 如需詳細資訊,請參閱 /vsiadls/文件

    Driver: GTiff/GeoTIFF
    Files: /vsiadls/naip/input/sample_image.tiff
    Size is 6634, 7565
    Coordinate System is:
    PROJCRS["NAD83 / UTM zone 16N",
        BASEGEOGCRS["NAD83",
            DATUM["North American Datum 1983",
                ELLIPSOID["GRS 1980",6378137,298.257222101,
                    LENGTHUNIT["metre",1]]],
            PRIMEM["Greenwich",0,
                ANGLEUNIT["degree",0.0174532925199433]],
            ID["EPSG",4269]],
        CONVERSION["UTM zone 16N",
            METHOD["Transverse Mercator",
                ID["EPSG",9807]],
            PARAMETER["Latitude of natural origin",0,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8801]],
            PARAMETER["Longitude of natural origin",-87,
                ANGLEUNIT["degree",0.0174532925199433],
                ID["EPSG",8802]],
            PARAMETER["Scale factor at natural origin",0.9996,
                SCALEUNIT["unity",1],
                ID["EPSG",8805]],
            PARAMETER["False easting",500000,
                LENGTHUNIT["metre",1],
                ID["EPSG",8806]],
            PARAMETER["False northing",0,
                LENGTHUNIT["metre",1],
                ID["EPSG",8807]]],
        CS[Cartesian,2],
            AXIS["(E)",east,
                ORDER[1],
                LENGTHUNIT["metre",1]],
            AXIS["(N)",north,
                ORDER[2],
                LENGTHUNIT["metre",1]],
        USAGE[
            SCOPE["Engineering survey, topographic mapping."],
            AREA["North America - between 90°W and 84°W - onshore and offshore. Canada - Manitoba; Nunavut; Ontario. United States (USA) - Alabama; Arkansas; Florida; Georgia; Indiana; Illinois; Kentucky; Louisiana; Michigan; Minnesota; Mississippi; Missouri; North Carolina; Ohio; Tennessee; Wisconsin."],
            BBOX[23.97,-90,84,-84]],
        ID["EPSG",26916]]
    Data axis to CRS axis mapping: 1,2
    Origin = (427820.000000000000000,3395510.000000000000000)
    Pixel Size = (1.000000000000000,-1.000000000000000)
    Metadata:
      AREA_OR_POINT=Area
    Image Structure Metadata:
      COMPRESSION=DEFLATE
      INTERLEAVE=PIXEL
      LAYOUT=COG
      PREDICTOR=2
    Corner Coordinates:
    Upper Left  (  427820.000, 3395510.000) ( 87d45'13.12"W, 30d41'24.67"N)
    Lower Left  (  427820.000, 3387945.000) ( 87d45'11.21"W, 30d37'18.94"N)
    Upper Right (  434454.000, 3395510.000) ( 87d41' 3.77"W, 30d41'26.05"N)
    Lower Right (  434454.000, 3387945.000) ( 87d41' 2.04"W, 30d37'20.32"N)
    Center      (  431137.000, 3391727.500) ( 87d43' 7.54"W, 30d39'22.51"N)
    Band 1 Block=512x512 Type=Byte, ColorInterp=Red
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    Band 2 Block=512x512 Type=Byte, ColorInterp=Green
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    Band 3 Block=512x512 Type=Byte, ColorInterp=Blue
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    Band 4 Block=512x512 Type=Byte, ColorInterp=Undefined
      Overviews: 3317x3782, 1658x1891, 829x945, 414x472
    
  • 使用 GDAL 將 GeoTiff 轉換為 PNG:

    from osgeo import gdal
    gdal.UseExceptions()
    access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key)
    tiff_in = "/vsiadls/aoa/input/sample_image.tiff" #/vsiadls/<container_name>/path/to/image
    png_out = "/vsiadls/aoa/input/sample_image.png" #/vsiadls/<container_name>/path/to/image
    options = gdal.TranslateOptions(format='PNG')
    gdal.Translate(png_out, tiff_in, options=options)
    
  • 將 GeoTiff 映射儲存在 Azure Data Lake Storage 中。

    由於數據如何儲存在雲端,以及檔案處理程式/vsiaz/和支援/vsiadls/只支援循序寫入的事實,因此我們會使用 mssparkutils 套件可用的檔案掛接功能。 將輸出寫入掛接位置之後,請將它複製到 Azure Data Lake Storage,如下列範例轉換所示:

    import shutil
    import sys
    from osgeo import gdal
    from notebookutils import mssparkutils
    
    mssparkutils.fs.mount(
        "abfss://<container_name>@<storage_account_name>.dfs.core.windows.net",
        "/<mount_path>",
        {"linkedService":"<linked_service_name>"}
    )
    
    access_key = TokenLibrary.getSecret('<key-vault-name>','<secret-name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCOUNT', '<storage_account_name>')
    gdal.SetConfigOption('AZURE_STORAGE_ACCESS_KEY', access_key)
    
    options = gdal.WarpOptions(options=['tr'], xRes=1000, yRes=1000)
    gdal.Warp('dst_img.tiff', '/vsiadls/<container_name>/path/to/src_img.tiff', options=options)
    
    jobId = mssparkutils.env.getJobId()
    
    shutil.copy("dst_img.tiff", f"/synfs/{jobId}/<mount_path>/path/to/dst_img.tiff")
    

    在 Azure Synapse 中,您可以將 Azure Data Lake Storage 新增為其中一個連結的服務。 如需指示,請參閱 鏈接服務

樣本解決方案

此架構的實作可於 GitHub 取得。

下圖顯示範例解決方案中的步驟:

顯示範例解決方案中步驟的圖表。

下載此架構的 Visio 檔案

注意

數據會從空間數據源提取,並複製到 Azure Data Lake Storage。 數據擷取不是參考實作的一部分。

  1. Azure Synapse 管線會從 Azure Data Lake Storage 讀取空間數據。
  2. 數據會使用 Azure Synapse 筆記本中的 GDAL 連結庫來處理。
  3. 已處理的數據會儲存在 Azure Data Lake Storage 中。
  4. 已處理的數據會從 Azure Data Lake Storage 讀取,並透過 Azure Synapse 自定義活動傳遞至物件偵測 自訂視覺 AI 模型。 自訂活動會使用 Azure Batch 集區來執行物件偵測模型。
  5. 物件偵測模型會輸出偵測到的物件和周框方塊清單。
  6. 偵測到的物件會轉換成 GeoJSON,並儲存在 Azure Data Lake Storage 中。
  7. GeoJSON 數據會從 Azure Data Lake Storage 讀取,並儲存在 PostgreSQL 資料庫中。
  8. 數據會從 PostgreSQL 資料庫讀取。 您可以在 ArcGIS Pro、QGIS 和 Power BI 等工具中進一步將其可視化。

在 Azure Synapse Spark 集區中安裝地理空間套件

您必須使用套件管理功能,在 Azure Synapse Spark 集區中安裝套件。 如需詳細資訊,請參閱 Azure Synapse 套件管理

若要支援 Azure Synapse 上的空間數據工作負載,您需要 GDALRasterioGeoPandas 等連結庫。 您可以使用 YAML 檔案,在無伺服器 Apache Spark 集區上安裝這些連結庫。 Anaconda 連結庫會預安裝在 Spark 集區上。

必要條件

指示

  1. 下列連結庫和套件可在 environment.yml 檔案中使用。 建議您使用此檔案在 Spark 集區中安裝連結庫。 如果您複製下列內容,請確定沒有索引標籤,因為 YAML 只允許空格做為縮排。

    name: aoi-env
    channels:
      - conda-forge
      - defaults
    dependencies:
      - azure-storage-file-datalake
      - gdal=3.3.0
      - libgdal
      - pip>=20.1.1
      - pyproj
      - shapely
      - pip:
        - rasterio
        - geopandas
    

    注意

    GDAL 會針對 Azure Data Lake Storage 使用虛擬文件系統 /vsiadls/

  2. 移至 並 https://web.azuresynapse.net 登入您的工作區。

  3. 在瀏覽窗格中選取 [管理 ],然後選取 [Apache Spark 集區]。

  4. 選取 Spark 集區上的省略號按鈕 [...],以選取 [套件 ]。 從本機上傳environment.yml檔案,並套用套件設定。

  5. 入口網站的通知區段會在安裝完成時通知您。 您也可以採取下列步驟來追蹤安裝進度:

    1. 移至 [監視] 索引標籤上的 [Spark 應用程式] 清單。
    2. 選取對應至集區更新的 SystemReservedJob-LibraryManagement 連結。
    3. 檢視驅動程序記錄。
  6. 執行下列程式代碼,確認已安裝正確的連結庫版本。 Conda 安裝預安裝的連結庫也會列出。

    import pkg_resources
    for d in pkg_resources.working_set:
       print(d)
    

如需詳細資訊,請參閱 管理套件

參與者

本文目前由 Microsoft 更新與維護。 原始投稿人如下。

主要作者:

其他參與者:

下一步