瞭解U-SQL與Spark資料格式之間的差異

重要

Azure Data Lake Analytics 於 2024 年 2 月 29 日淘汰。 透過此公告 深入瞭解

針對數據分析,您的組織可以使用 Azure Synapse AnalyticsMicrosoft Fabric

如果您想要使用 Azure DatabricksAzure HDInsight Spark,建議您將數據從 azure Data Lake Storage Gen1 移轉至 Azure Data Lake Storage Gen2

除了移動檔案之外,您也會想要讓儲存在 U-SQL 數據表中的數據可供 Spark 存取。

移動儲存在 Azure Data Lake Storage Gen1 檔案中的數據

儲存在檔案中的數據可以透過各種方式移動:

  • 撰寫 Azure Data Factory 管線,將數據從 azure Data Lake Storage Gen1 帳戶複製到 azure Data Lake Storage Gen2 帳戶
  • 撰寫 Spark 作業,從 Azure Data Lake Storage Gen1 帳戶讀取數據,並將數據寫入 Azure Data Lake Storage Gen2 帳戶。 根據您的使用案例,如果您不需要保留源檔格式,您可能會想要以不同的格式寫入它,例如 Parquet。

建議您檢閱文章 將巨量數據分析解決方案從 Azure Data Lake Storage Gen1 升級至 Azure Data Lake Storage Gen2

移動儲存在U-SQL資料表中的數據

Spark 無法理解 U-SQL 數據表。 如果您有儲存在 U-SQL 資料表中的數據,您將執行 U-SQL 作業來擷取資料表數據,並以 Spark 瞭解的格式加以儲存。 最適當的格式是依照 Hive 中繼資料存放庫的資料夾佈局來建立一套 Parquet 檔案。

您可以使用內建 Parquet 輸出器在 U-SQL 中達成輸出,並使用動態輸出分割區搭配檔案集來建立分割區資料夾。 處理比以往更多的檔案,並使用 Parquet 提供如何建立這類 Spark 消費性數據的範例。

在此轉換之後,您會將資料複製,按一章中所述,移動儲存在 Azure Data Lake Storage Gen1 檔案裡的資料()。

警示

  • 複製檔案時的數據語意會在位元元組層級進行複製。 因此,相同的數據應該會出現在 azure Data Lake Storage Gen2 帳戶 中。 不過請注意,Spark 可能會以不同的方式解譯某些字元。 例如,它可能會針對 CSV 檔案中的數據列分隔符使用不同的預設值。 此外,如果您要從數據表中複製具類型的數據,則 Parquet 和 Spark 對於某些具類型的值可能會有不同的精度和刻度(例如 float),而且可能會以不同的方式處理空值。 例如,U-SQL 具有 Null 值的 C# 語意,而 Spark 則具有 Null 值的三值邏輯。

  • 數據組織 (分割) U-SQL 資料表提供兩個層級的數據分割。 外部層級 (PARTITIONED BY) 是依值排序,主要會使用資料夾階層對應至Hive/Spark 分割配置。 您必須確定 Null 值會對應到正確的資料夾。 U-SQL 中的內層 (DISTRIBUTED BY) 提供四種分布模式:循環、範圍、雜湊和直接雜湊。 Hive/Spark 數據表僅支援使用與 U-SQL 不同的哈希函式進行值分割或哈希分割。 當您輸出 U-SQL 資料表資料時,您可能只能對應到 Spark 的值分割,並可能需要根據最終的 Spark 查詢進一步調整您的資料佈局。

後續步驟