瞭解U-SQL與Spark資料格式之間的差異
重要
Azure Data Lake Analytics 於 2024 年 2 月 29 日淘汰。 透過此公告 深入瞭解。
針對數據分析,您的組織可以使用 Azure Synapse Analytics 或 Microsoft Fabric。
如果您想要使用 Azure Databricks 或 Azure HDInsight Spark,建議您將數據從 azure Data Lake Storage Gen1 移轉至 Azure Data Lake Storage Gen2。
除了移動檔案之外,您也會想要讓儲存在 U-SQL 數據表中的數據可供 Spark 存取。
儲存在檔案中的數據可以透過各種方式移動:
- 撰寫 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
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 查詢進一步調整您的資料佈局。