ODPS Python3开发UDF实践 dataworks平台

简介: # 业务背景 花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息. 用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着. 业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营 # 解决思路 这个问题有两个解法 #### 1. ODPS SQL解法 每月月末跑一个数, 统计本月用户

业务背景

花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息.
用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着.
业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营

解决思路

这个问题有两个解法

1. ODPS SQL解法

每月月末跑一个数, 统计本月用户是否使用过循环, 开始月份是X月, X+1月有用过则把连续循环数+1, 没有用过则置零. 该方法的缺点是时效性问题, 即月末才能看到数据, 有些用户在月中就完成循环了.

2. ODPS UDF解法

拉取用户历史以来循环办理日期(中间层有个全量表可以直接取出数据), 通过日期数组直接判定是否连续循环, 该方法效率快, 准确性高, 数据时效性也好, 唯一麻烦的就是需要自己写UDF

后来评估了两个方法的开发量, 最后决定使用UDF实现这个功能, 所以接下来说说UDF的实践过程

D2开发Python3 UDF的流程简介

1. 本地开发Python3代码

虽然现在D2有Function Studio, 但是它只支持Python2.7, 不支持3的运行
所以我是本地先写个.py实现核心功能, 再弄到D2里面去, 用macOS开个terminal做测试特别方便.

2. 建立资源

2.1 ODPS Python改写

资源说白了就是实现核心功能的py模块, 但是这段代码需要进行ODPS规范的改造
1-引入模块odps.udf, 在每个类前加入一段@annotate的修饰符, 管理入参和出参格式, 但是入参的写法和python语法不太一样, 是遵循了ODPS的语法, 详见4条目
2-同时需要把本地的实现函数改为class
3-并且该类中只能调用evaluate方法实现核心功能

from odps.udf import annotate           # 引入odps包

@annotate("array<string> -> bigint")    # 修饰符, 入参 -> 出参
class CalMaxCycleCnt(object):           # 类名, 即要发布的函数名称
    def evaluate(self, date_lists):     # 实现方法, 必须写evaluate
        '''
        date_lists.sort(reverse=True)
        实现的功能的核心代码
        '''
        return max_cycle_cnt            # 返回结果, bigint

4-ODPS和PYTHON3参数格式转换
可先下图, 或见链接: https://tech.antfin.com/docs/2/154431
image.png

2.2 D2建立资源流程图

第一步, 新建

image.png

第二步, 填写资源名称

image.png

第三步, 贴上代码+提交发布

image.png

3. 引入函数

资源发布后, 可以把资源中的class作为函数引入到ODPS中

第一步, 新建

image.png

第二步, 填写函数名称, 此处填写class名称

image.png

第三步, 配置函数+提交发布

类名要填资源名称(不含py).类名, 如图中hb_2XXXXXX3_test.CalMaxCycleCnt, 否则定位不到函数
资源列表填资源名称.py即可, 如图中hb_2XXXXXX3_test.py
image.png

4. 线上验收测试

SELECT  user_id
        ,CalMaxCycleCnt( txn_dt_array ) AS max_cycle_cnt
FROM tbl_name

后记

1. 测试难

因为写的Python3, 无法测试环境测, 所以代码要尽可能写的完整, 不然BUG只能通过再次发布来修复

2. 注意NULL值

SQL的入参, 特别是多表关联的时候难免有NULL值, python的代码里面可以加这一段对NULL值初始化

if next_bill_date is None or len(next_bill_date)==0:
    next_bill_date=next_month_fst_day(bizdate)

如果直接对NULL值判定len, 则会报错

TypeError: object of type 'NoneType' has no len()
相关实践学习
基于Hologres轻量实时的高性能OLAP分析
本教程基于GitHub Archive公开数据集,通过DataWorks将GitHub中的项⽬、行为等20多种事件类型数据实时采集至Hologres进行分析,同时使用DataV内置模板,快速搭建实时可视化数据大屏,从开发者、项⽬、编程语⾔等多个维度了解GitHub实时数据变化情况。
相关文章
|
SQL DataWorks 关系型数据库
DataWorks+Hologres:打造企业级实时数仓与高效OLAP分析平台
本方案基于阿里云DataWorks与实时数仓Hologres,实现数据库RDS数据实时同步至Hologres,并通过Hologres高性能OLAP分析能力,完成一站式实时数据分析。DataWorks提供全链路数据集成与治理,Hologres支持实时写入与极速查询,二者深度融合构建离在线一体化数仓,助力企业加速数字化升级。
|
存储 分布式计算 DataWorks
从MaxCompute到Milvus:通过DataWorks进行数据同步,实现海量数据高效相似性检索
如果您需要将存储在MaxCompute中的大规模结构化数据导入Milvus,以支持高效的向量检索和相似性分析,可以通过DataWorks的数据集成服务实现无缝同步。本文介绍如何利用DataWorks,快速完成从MaxCompute到Milvus的离线数据同步。
|
SQL 人工智能 自然语言处理
DataWorks年度发布:智能化湖仓一体数据开发与治理平台的演进
阿里云在过去15年中持续为268集团提供数据服务,积累了丰富的实践经验,并连续三年在IDC中国数据治理市场份额中排名第一。新一代智能数据开发平台DateWorks推出了全新的DateStudio IDE,支持湖仓一体化开发,新增Flink计算引擎和全面适配locs,优化工作流程系统和数据目录管理。同时,阿里云正式推出个人开发环境模式和个人Notebook,提升开发者体验和效率。此外,DateWorks Copilot通过自然语言生成SQL、代码补全等功能,显著提升了数据开发与分析的效率,已累计帮助开发者生成超过3200万行代码。
|
人工智能 Cloud Native 大数据
DataWorks深度技术解读:构建开放的云原生数据开发平台
Dateworks是一款阿里云推出的云原生数据处理产品,旨在解决数据治理和数仓管理中的挑战。它强调数据的准确性与一致性,确保商业决策的有效性。然而,严格的治理模式限制了开发者的灵活性,尤其是在面对多模态数据和AI应用时。为应对这些挑战,Dateworks进行了重大革新,包括云原生化、开放性增强及面向开发者的改进。通过Kubernetes作为资源底座,Dateworks实现了更灵活的任务调度和容器化支持,连接更多云产品,并提供开源Flowspec和Open API,提升用户体验。
|
数据采集 机器学习/深度学习 DataWorks
DataWorks产品评测:大数据开发治理的深度体验
DataWorks产品评测:大数据开发治理的深度体验
695 1
|
SQL 分布式计算 DataWorks
DataWorks产品测评|基于DataWorks和MaxCompute产品组合实现用户画像分析
本文介绍了如何使用DataWorks和MaxCompute产品组合实现用户画像分析。首先,通过阿里云官网开通DataWorks服务并创建资源组,接着创建MaxCompute项目和数据源。随后,利用DataWorks的数据集成和数据开发模块,将业务数据同步至MaxCompute,并通过ODPS SQL完成用户画像的数据加工,最终将结果写入`ads_user_info_1d`表。文章详细记录了每一步的操作过程,包括任务开发、运行、运维操作和资源释放,帮助读者顺利完成用户画像分析。此外,还指出了文档中的一些不一致之处,并提供了相应的解决方法。
|
SQL DataWorks 数据可视化
阿里云DataWorks评测:大数据开发治理平台的卓越表现
阿里云DataWorks是一款集数据集成、开发、分析与管理于一体的大数据平台,支持多种数据源无缝整合,提供可视化ETL工具和灵活的任务调度机制。其内置的安全体系和丰富的插件生态,确保了数据处理的高效性和安全性。通过实际测试,DataWorks展现了强大的计算能力和稳定性,适用于中小企业快速搭建稳定高效的BI系统。未来,DataWorks将继续优化功能,降低使用门槛,并推出更多灵活的定价方案,助力企业实现数据价值最大化。
|
数据采集 DataWorks 搜索推荐
DataWorks产品评测:数据处理最佳实践与平台体验
DataWorks产品评测:数据处理最佳实践与平台体验
346 8
|
分布式计算 DataWorks 搜索推荐
聊聊DataWorks这个大数据开发治理平台
聊聊DataWorks这个大数据开发治理平台
590 2
|
机器学习/深度学习 存储 数据采集
解锁DataWorks:一站式大数据治理神器
解锁DataWorks:一站式大数据治理神器
423 1

推荐镜像

更多