首页 > 解决方案 > PyFlink UDF:何时使用矢量化与标量

问题描述

在向量化和标量 PyFlink UDF 之间做出决定时,是否有一组简单的规则可以遵循?

根据文档,向量化 UDF 具有以下优点:(1)较小的 ser-de 和调用开销(2)向量(尤其是数字,如果我理解正确的话)计算得到了高度优化,这要归功于 Numpy 等库。

矢量化 Python 用户定义函数是通过在 JVM 和 Python VM 之间以箭头列格式传输一批元素来执行的函数。由于序列化/反序列化开销和调用开销大​​大降低,向量化 Python 用户定义函数的性能通常远高于非向量化 Python 用户定义函数。此外,用户可以利用流行的 Python 库,如 Pandas、Numpy 等来实现矢量化 Python 用户定义函数。这些 Python 库经过高度优化并提供高性能的数据结构和函数。

问题 1:矢量化 UDF 是否总是首选?

假设,在我的用例中,我想简单地从 JSON 列中提取一些字段,但 Flink内置函数尚不支持,因此我需要定义我的 udf,如:

@udf(...)
def extract_field_from_json(json_value, field_name):
    import json
    return json.loads(json_value)[field_name]

问题 2:在这种非数字情况下,我是否也会从矢量化 UDF 中受益?

标签: apache-flinkpyflink

解决方案


推荐阅读