更新时间:2026-10-16 GMT+08:00
分享

使用AuraJobV2运行示例

该示例实现了通过该SDK注册UDF到LakeFormation后,再使用AuraJobV2引擎读取指定数据库表中的数据列后使用UDF做计算的过程。

前提条件

  • 已创建OBS并行文件系统,用于存放SDK上传的UDF包。具体操作,请参见创建并行文件系统。
  • 已创建LakeFormation实例,并确认实例下存在数据目录(Catalog)与数据库。具体操作,请参见创建LakeFormation实例并规划元数据。
  • 已在LakeFormation中注册数据表(本示例至少包含id、value两列)。
  • 已创建AuraJobV2端点,并获取端点名称、工作空间ID等信息。具体操作,请参见创建Aura引擎端点。
  • 已获取AK和SK信息,具备OBS并行文件系统和LakeFormation访问权限。
  • 已获取并安装Aura DataFrame SDK。具体操作,请参见Aura DataFrame SDK获取与安装。

示例

# 1. 导入依赖
import os
from aidatalake_catalog import Parameter, Signature
from aidatalake_catalog.client import AIDatalake_Catalog_Client
from aura_frame.multimodal import ai_lake

# 2. 定义带类型注解的UDF
class Multiplier:
    """Class 定义 UDF:乘以可配置 factor(默认 2)。"""
    def __init__(self, factor: int = 2):
        self._factor = factor
    def __call__(self, x: int) -> int:
        return x * self._factor

# 3. 定义函数签名(可选,未传入时由SDK根据类型注解自动推断)
sig = Signature(
    parameters=[Parameter(name="x", annotation=int)],
    return_annotation=int,
)
# 4. 初始化Catalog客户端(AK/SK建议从环境变量读取,避免硬编码)
client = AIDatalake_Catalog_Client(
    ak=os.getenv("XXX_SDK_AK"),
    sk=os.getenv("XXX_SDK_SK"),
    security_token=None,                       # 临时凭证时使用
    obs_endpoint="obs.cn-north-4.myhuaweicloud.com",
    lakeformation_endpoint="https://lakeformation.cn-north-4.myhuaweicloud.com",
    lakeformation_instanceid="your-instance-id",
    catalog_name="your-catalog-name",
    default_database="your_default_db",
    obs_path="your-bucket/udf/",              # bucket_name/dir/subdir
    project_id="your-project-id",
    ignore_ssl_verification=False,
)

# 5. 注册自定义函数
func = client.create_udf(
    Multiplier,
    name="class_multiplier_def",
    signature=sig,
    description="class 定义 UDF: 乘以 factor (默认 2)",
)

# 6.使用Aura引擎执行函数
"""
|  id  | value|
|------|------|
|  1   |  10  |
|  2   |  20  |
|  3   |  30  |
"""
con = ai_lake.connect(
        aura_endpoint=os.getenv("aura_endpoint"),
        aura_endpoint_name=os.getenv("aura_endpoint_name"),
        aura_workspace_id=os.getenv("aura_workspace_id"),
        lf_catalog_name=os.getenv("lf_catalog_name"),
        access_key=os.getenv("access_key"),
        secret_key=os.getenv("secret_key"),
        default_database=target_database,
        use_single_cn_mode=True
)

ds = con.load_dataset("table_1")  # table_1需要提前在LakeFormation注册
ds = ds.map(fn=f'{database}.class_multiplier_def', on=['value'], as_col='mul_result')
df = ds.execute().sort_values('id').reset_index(drop=True)

print(f"  {'ID':<5} {'原始值':<10} {'mul_result':<15}")
print("-" * 35)
for _, r in df.iterrows():
    print(f"{int(r['id']):<5} {int(r['value']):<10} {int(r['mul_result']):<15}")

执行结果:

  ID    原始值        mul_result     
-----------------------------------
  1     10         20             
  2     20         40             
  3     30         60 

相关文档