MaxFrame 本地调试模式(Local Debug)

更新时间:
复制为 MD 格式

本文介绍MaxFrame本地调试模式(Local Debug Mode)的功能特性和使用方式。本地调试模式允许在本地环境中直接调试apply()apply_chunk()UDF函数,无需连接远程服务。

背景信息

在传统的MaxFrame UDF开发流程中,调试apply()apply_chunk()等函数时,需要将代码提交到远程集群环境执行,无法在本地设置断点或单步调试,每次修改后都需重新提交远程运行,且可能需要维护多套代码以区分本地和生产环境。

MaxFrame本地调试模式(Local Debug Mode)解决了以上问题。开启本地调试模式后,UDF函数在本地Python环境中直接执行,支持IDE断点调试,完全离线可用,且同一份代码可在本地调试和生产运行之间无缝切换。

适用场景

场景

描述

UDF 逻辑开发

编写复杂业务逻辑时可实时调试验证

数据转换测试

验证数据清洗、转换规则是否正确

问题排查

定位 UDF 执行异常的根本原因

离线开发

无网络环境下仍可继续开发工作

功能特性

与传统远程调试方式相比,本地调试模式具有以下优势

维度

本地调试模式

传统方式

断点调试

支持IDE断点调试

不支持

远端依赖

完全离线本地调试

需连接远程集群环境

调试周期

本地即时执行

每次需提交远程执行

代码改造

同一份代码

需维护多套代码

  • 零配置开启调试

    只需 debug=Truedebug="local",无需额外工具或服务

    session = new_session(o, debug=True)
  • 完全离线可用

    不依赖网络或远端集群资源

  • 原生 IDE 支持

    • 支持 PyCharm、VSCode等主流 IDE 以及 DataWorks Notebook。

    • 完整保留设置断点、变量监视、单步执行等调试能力。

    • 调试体验与本地 Python 开发一致。

  • 灵活数据接入

    支持内存、本地文件、MaxCompute 表等多种来源。

    数据源类型

    获取方式

    适用场景

    内存数据

    md.DataFrame(pd.DataFrame())

    快速验证逻辑

    MaxCompute 表

    md.read_odps_table()

    真实数据测试

    本地文件

    pd.read_csv()等原生 Pandas 数据接口

    离线开发

  • 生产无缝切换

    调试代码与生产代码完全一致,移除 debug=Truedebug="local"后代码可直接上线运行。

    # 调试环境
    session = new_session(o, debug=True)
    
    # 生产环境
    session = new_session(o)

快速开始

  1. 环境准备

    pip install --upgrade maxframe # maxframe SDK版本需至少为2.5.0
  2. 基础示例

    from odps import ODPS
    from maxframe import new_session
    import maxframe.dataframe as md
    import pandas as pd
    
    # 初始化 ODPS 对象
    o = ODPS(
        access_id='your_access_id',
        secret_access_key='your_secret_key',
        project='your_project',
        endpoint='your_endpoint'
    )
    
    # 启用调试模式
    session = new_session(o, debug=True)
    
    # 准备数据
    df = md.DataFrame(pd.DataFrame({
        "sales": [5000, 8000, 12000, 3000],
        "region": ["A", "B", "C", "D"]
    }))
    
    def calculate_commission(row):
        sales = row['sales']
        if sales > 10000: # 可在此设置断点
            rate = 0.15
            print(rate)
        elif sales > 5000: # 可在此设置断点
            rate = 0.10
            print(rate)
        else:
            rate = 0.05
        return sales * rate
    
    # 执行并获取结果
    result = df.apply(calculate_commission, axis=1).execute().fetch()

注意事项

  • 性能差异:本地调试模式用于开发验证,性能不等同于生产环境。

  • 数据量限制:建议调试时使用小规模样本数据。

  • 依赖一致性:确保本地 Python 环境与生产环境依赖版本一致。

  • 敏感数据:调试 MaxCompute 表时注意数据权限和脱敏处理。