了解 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 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 的精度和小数位数可能不同,并且它们可能以不同的方式处理空值。 例如,U-SQL 采用 C# 语义中的 null 值,而 Spark 使用三值逻辑来处理 null 值。

  • 数据组织 (分区) U-SQL 表提供两个级别分区。 外部级别(PARTITIONED BY)通过值进行操作,主要使用文件夹层次结构映射到 Hive/Spark 分区方案。 需要确保 null 值映射到正确的文件夹。 U-SQL 中的内部级别 (DISTRIBUTED BY) 提供四种分布方案:轮循机制、范围、哈希和直接哈希。 Hive/Spark 表仅支持使用与 U-SQL 不同的哈希函数进行值分区或哈希分区。 输出 U-SQL 表数据时,可能只能映射到 Spark 的值分区,并且可能需要根据最终的 Spark 查询进一步优化数据布局。

后续步骤