开发者学堂课程【开源 Flink 极速上手教程:PyFlink 快速上手】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/331/detail/3712
PyFlink 快速上手(二)
三.PyFlink 功能演示
https://github.com/pyflink/playgrounds/tree/1.11
打开该网页页面,提供了 PyFlink 相关的一些 demo,这些 demo运行在 Docker 中,首先需要在本地安装 Docker 环境。环境安装完成后,首先运行命令 docker-compose up -d,该命令会启动一个Flink 的 standalone 集群,之后运行的 Flink 例子都会提交到该集群。输入命令 docker ps 可以查看。
例一.WordCount
首先定义了 blink_planner,同时应用在批模式下,作业并发度是1。在作业中还定义了 source,只有一个 string 类型字段,输入数据来自一个文件。同时也定义了一个 sink,包括两个字段,一个是 word,一个是 count,类型分别是 string 类型和 BIGINT 类型,sink 位置也是在本地一个文件中。作业基本执行逻辑是读取 source 中的数据,按照 group_by 计算 word 的频率,将结果写入 sink。最后Execute 语句会将作业提交执行。运行该作业,可以看到作业运行之后提交到刚刚的 Flink 集群中执行。查看作业执行结果:
flink,2
pyflink,1
例二.Python UDF
运行在 blink_planner,运行在批处理模式下,作业并发度为1。在作业中定义了一个 UDF,该 UDF 输入包括两个列,类型为 BIGINT,输出类型也为 BIGINT。UDF逻辑是将这两个列相加作为一个结果输出。 source 表与 sink 表与上例类似。在执行逻辑中,读取 source表然后运行 UDF,将两列相加再将计算结果写入 sink 表。执行该作业,查看执行结果:
3
例三.带有依赖的 Python UDF
在该 UDF中引用了一个第三方依赖,在作业执行中执行该依赖,使用set_python_requirements。查看 requirements文件,可以看到文件只包含了一行,指定了需要的依赖及版本。运行该作业,在初始化阶段需要下载 Python 相关的依赖,查看执行结果:
3
例四.向量化 Python UDF
在 UDF 定义时加了一个 udf_type 字段,说明是向量化的 Python UDF。其他逻辑与普通 Python UDF 类似。执行作业,查看执行结果:
3
例五.在 Java Table API 中使用 Python UDF
用 Java 语言写,通过一个 DDL 语句的方式注册 Python UDF,然后在 execute Sql 语句中使用注册的 UDF。先编译该 UDF,执行作业,通过 flink run -j 命令指定 jar 包,然后通过 pyfs 参数指定运行 Python UDF 所用到的路径。
例六.在 SQL 中使用 Python UDF
在资源文件中,声明了一个 UDF,名字是 add_one,类型是 Python,位置是 udfs.add_one。运行作业,查看执行结果:
2
3
4
四.PyFlink 下一步规划
1.Python DataStream API
2.Python UDAF 支持/Pandas UDAF 支持
3.Java/Python 通信优化
常用资源链接
1.Python Table API 文档
https://ci.apache.org/projects/flink/flink-docs-master/api/python/
2.PyFlink 文档
https://ci.apache.org/projects/flink/flink-docs-master/dev/table/python/
3.PyFlink playground
https://github.com/pyflink/playgrounds/tree/1.11
回顾:PyFlink 项目的目标以及发展历程,同时也学习了 PyFlink 目前的核心功能,比如 Python Table API,Python UDF,向量化 Python UDF,如何在 Python UDF中使用Metrics 以及 Python 的依赖管理,Python UDF 目前所做的一些优化工作,同时也展示了一些 Demo,使对 Python UDF 的功能有更直观的了解,最后,学习了 PyFlink 的下一步规划。