重要
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 数据工厂 管道,将数据从 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 的精度和小数位数可能不同,并且它们可能以不同的方式处理空值。 例如,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 查询进一步优化数据布局。