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

重要

Azure Data Lake Analytics已于 2024 年 2 月 29 日停用。 通过此公告了解更多信息。

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

先决条件

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

  • 导航到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 集成

数据类型

  • U-SQL 中的字符串和数字列在 Pandas 和 U-SQL 之间按原样转换
  • U-SQL Null 与 Pandas NA 值相互转换

架构

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

Python 版本

仅支持 Python 3.5.1(为 Windows 编译)。

标准 Python 模块

所有标准 Python 模块都包括在内。

更多 Python 模块

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

  • pandas
  • numpy
  • numexpr

异常消息

当前,Python 代码中的异常显示为泛型顶点失败。 以后,U-SQL 作业错误消息会显示 Python 异常消息。

输入和输出大小限制

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

后续步骤