了解 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 的某些类型化值(如 float)可能有不同的精度和小数位数,并且可能以不同的方式处理 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 查询进一步优化数据布局。

后续步骤