了解 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 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 的部分具類型值可能會有不同的精確度和級別 (例如,浮點數),而且可能會以不同的方式處理 Null 值。 例如,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 查詢進一步調整數據配置。