ODPS Python3开发UDF实践 dataworks平台

本文涉及的产品
大数据开发治理平台DataWorks,Serverless资源组抵扣包300CU*H
云原生大数据计算服务 MaxCompute,5000CU*H 100GB 3个月
云原生大数据计算服务MaxCompute,500CU*H 100GB 3个月
简介: # 业务背景 花呗有一个生息产品叫做循环, 也就最低还款: 即每月进行最小还款, 剩下的金额产生利息. 用户每个月都可以进行最低还款的办理, 即还不掉的本金永远在里面滚着. 业务方想要知道一个业务指标, 就是用户连续办理了多少个月的循环, 然后针对这部分用户做精细化运营 # 解决思路 这个问题有两个解法 #### 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()
相关实践学习
基于MaxCompute的热门话题分析
本实验围绕社交用户发布的文章做了详尽的分析,通过分析能得到用户群体年龄分布,性别分布,地理位置分布,以及热门话题的热度。
一站式大数据开发治理平台DataWorks初级课程
DataWorks 从 2009 年开始,十ー年里一直支持阿里巴巴集团内部数据中台的建设,2019 年双 11 稳定支撑每日千万级的任务调度。每天阿里巴巴内部有数万名数据和算法工程师正在使用DataWorks,承了阿里巴巴 99%的据业务构建。本课程主要介绍了阿里巴巴大数据技术发展历程与 DataWorks 几大模块的基本能力。 课程目标 &nbsp;通过讲师的详细讲解与实际演示,学员可以一边学习一边进行实际操作,可以深入了解DataWorks各大模块的使用方式和具体功能,让学员对DataWorks数据集成、开发、分析、运维、安全、治理等方面有深刻的了解,加深对阿里云大数据产品体系的理解与认识。 适合人群 &nbsp;企业数据仓库开发人员 &nbsp;大数据平台开发人员 &nbsp;数据分析师 &nbsp;大数据运维人员 &nbsp;对于大数据平台、数据中台产品感兴趣的开发者
相关文章
|
1月前
|
机器学习/深度学习 算法 搜索推荐
从理论到实践,Python算法复杂度分析一站式教程,助你轻松驾驭大数据挑战!
【10月更文挑战第4天】在大数据时代,算法效率至关重要。本文从理论入手,介绍时间复杂度和空间复杂度两个核心概念,并通过冒泡排序和快速排序的Python实现详细分析其复杂度。冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1);快速排序平均时间复杂度为O(n log n),空间复杂度为O(log n)。文章还介绍了算法选择、分而治之及空间换时间等优化策略,帮助你在大数据挑战中游刃有余。
60 4
|
1月前
|
SQL 存储 分布式计算
ODPS技术架构深度剖析与实战指南——从零开始掌握阿里巴巴大数据处理平台的核心要义与应用技巧
【10月更文挑战第9天】ODPS是阿里巴巴推出的大数据处理平台,支持海量数据的存储与计算,适用于数据仓库、数据挖掘等场景。其核心组件涵盖数据存储、计算引擎、任务调度、资源管理和用户界面,确保数据处理的稳定、安全与高效。通过创建项目、上传数据、编写SQL或MapReduce程序,用户可轻松完成复杂的数据处理任务。示例展示了如何使用ODPS SQL查询每个用户的最早登录时间。
95 1
|
12天前
|
SQL 数据采集 分布式计算
【赵渝强老师】基于大数据组件的平台架构
本文介绍了大数据平台的总体架构及各层的功能。大数据平台架构分为五层:数据源层、数据采集层、大数据平台层、数据仓库层和应用层。其中,大数据平台层为核心,负责数据的存储和计算,支持离线和实时数据处理。数据仓库层则基于大数据平台构建数据模型,应用层则利用这些模型实现具体的应用场景。文中还提供了Lambda和Kappa架构的视频讲解。
【赵渝强老师】基于大数据组件的平台架构
|
1月前
|
前端开发 数据可视化 API
Python实现智能家居设备的统一控制平台
【10月更文挑战第6天】 Python实现智能家居设备的统一控制平台
70 11
|
12天前
|
并行计算 数据挖掘 大数据
Python数据分析实战:利用Pandas处理大数据集
Python数据分析实战:利用Pandas处理大数据集
|
1月前
|
机器学习/深度学习 监控 搜索推荐
电商平台如何精准抓住你的心?揭秘大数据背后的神秘推荐系统!
【10月更文挑战第12天】在信息爆炸时代,数据驱动决策成为企业优化决策的关键方法。本文以某大型电商平台的商品推荐系统为例,介绍其通过收集用户行为数据,经过预处理、特征工程、模型选择与训练、评估优化及部署监控等步骤,实现个性化商品推荐,提升用户体验和销售额的过程。
79 1
|
2月前
|
机器学习/深度学习 人工智能 算法
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
文本分类识别系统。本系统使用Python作为主要开发语言,首先收集了10种中文文本数据集("体育类", "财经类", "房产类", "家居类", "教育类", "科技类", "时尚类", "时政类", "游戏类", "娱乐类"),然后基于TensorFlow搭建CNN卷积神经网络算法模型。通过对数据集进行多轮迭代训练,最后得到一个识别精度较高的模型,并保存为本地的h5格式。然后使用Django开发Web网页端操作界面,实现用户上传一段文本识别其所属的类别。
93 1
【新闻文本分类识别系统】Python+卷积神经网络算法+人工智能+深度学习+计算机毕设项目+Django网页界面平台
|
1月前
|
机器学习/深度学习 数据可视化 大数据
驾驭股市大数据:Python实战指南
【10月更文挑战第1天】随着信息技术的发展,投资者现在能够访问到前所未有的海量金融数据。本文将指导您如何利用Python来抓取当前股市行情的大数据,并通过分析这些数据为自己提供决策支持。我们将介绍从数据获取到处理、分析以及可视化整个流程的技术方法。
95 2
|
2月前
|
存储 大数据 索引
解锁Python隐藏技能:构建高效后缀树Suffix Tree,处理大数据游刃有余!
通过构建高效的后缀树,Python程序在处理大规模字符串数据时能够游刃有余,显著提升性能和效率。无论是学术研究还是工业应用,Suffix Tree都是不可或缺的强大工具。
52 6
|
2月前
|
机器学习/深度学习 数据挖掘 大数据
大数据时代的“淘金术”:Python数据分析+深度学习框架实战指南
在大数据时代,数据被视为新财富源泉,而从海量信息中提取价值成为企业竞争的核心。本文通过对比方式探讨如何运用Python数据分析与深度学习框架实现这一目标。Python凭借其强大的数据处理能力及丰富库支持,已成为数据科学家首选工具;而TensorFlow和PyTorch等深度学习框架则为复杂模型构建提供强有力的技术支撑。通过融合Python数据分析与深度学习技术,我们能在各领域中发掘数据的无限潜力。无论是商业分析还是医疗健康,掌握这些技能都将为企业和社会带来巨大价值。
94 6
下一篇
无影云桌面