在 Azure Data Lake Analytics 中使用 Python 代码扩展 U-SQL 脚本

重要

Azure Data Lake Analytics 于 2024 年 2 月 29 日停用。 了解更多 的信息,请参阅此公告

对于数据分析,组织可以使用 Azure Synapse AnalyticsMicrosoft Fabric

先决条件

在开始之前,请确保 Python 扩展安装在 Azure Data Lake Analytics 帐户中。

  • 在 Azure 门户中导航到 Data Lake Analytics 帐户
  • 在左侧菜单中的 入门 下选择 示例脚本
  • 选择 安装 U-SQL 扩展,然后 确定

概述

适用于 U-SQL 的 Python 扩展使开发人员能够执行 Python 代码的大规模并行执行。 以下示例演示了基本步骤:

  • 使用 REFERENCE ASSEMBLY 语句为 U-SQL 脚本启用 Python 扩展
  • 使用 REDUCE 操作对输入数据按键进行分区
  • U-SQL 的 Python 扩展包括一个内置化简器(Extension.Python.Reducer),用于在分配给化简器的每个顶点上运行 Python 代码
  • U-SQL 脚本包含嵌入的 Python 代码,该代码具有一个名为 usqlml_main 的函数,该函数接受 pandas DataFrame 作为输入,并将 pandas DataFrame 作为输出返回。
REFERENCE ASSEMBLY [ExtPython];
DECLARE @myScript = @"
def get_mentions(tweet):
    return ';'.join( ( w[1:] for w in tweet.split() if w[0]=='@' ) )
def usqlml_main(df):
    del df['time']
    del df['author']
    df['mentions'] = df.tweet.apply(get_mentions)
    del df['tweet']
    return df
";
@t  =
    SELECT * FROM
       (VALUES
           ("D1","T1","A1","@foo Hello World @bar"),
           ("D2","T2","A2","@baz Hello World @beer")
       ) AS date, time, author, tweet );
@m  =
    REDUCE @t ON date
    PRODUCE date string, mentions string
    USING new Extension.Python.Reducer(pyScript:@myScript);
OUTPUT @m
    TO "/tweetmentions.csv"
    USING Outputters.Csv();

Python 如何与 U-SQL 集成

数据类型

  • 在 Pandas 和 U-SQL 之间,U-SQL 中的字符串列和数值列按原样转换。
  • U-SQL Null 值可以转换为 Pandas NA 值,也可以从 Pandas NA 值转换回来。

模式

  • U-SQL 不支持 Pandas 中的索引向量。 Python 函数中的所有输入数据帧始终具有从 0 到行数减 1 的 64 位数字索引。
  • U-SQL 数据集不能具有重复的列名称
  • U-SQL 数据集列名称不是字符串。

Python 版本

仅支持 Python 3.5.1(已针对 Windows 编译)。

标准 Python 模块

包括所有标准 Python 模块。

更多 Python 模块

除了标准 Python 库,还包括几个常用的 Python 库:

  • 熊猫
  • numpy
  • numexpr

异常消息

目前,Python 代码中的异常显示为泛型顶点故障。 将来,U-SQL 作业错误消息将显示 Python 异常消息。

输入和输出大小限制

每个顶点分配的内存量有限。 目前,对于 AU,此限制为 6 GB。 由于输入和输出数据帧必须存在于 Python 代码的内存中,因此输入和输出的总大小不能超过 6 GB。

后续步骤