PySpark 如何实现 Pandas UDF(用户定义函数)?
顾名思义,PySpark Pandas UDF 是一种使用 Pandas DataFrame 在 PySpark 中实现用户定义函数 (UDF) 的方法。PySpark API 文档给出的定义如下:
“Pandas UDF 是用户定义的函数,由 Spark 执行,使用 Arrow 传输数据,Pandas 执行数据,允许向量化操作。Pandas UDF 是使用
pandas_udf
作为装饰器或包装函数来定义的,不需要额外的配置。Pandas UDF 通常表现为常规的 PySpark 函数 API。”
在这篇文章中,我们将探索PandasUDFType.GROUPED_MAP
,或者在 PySpark 的最新版本中,也称为pyspark.sql.GroupedData.applyInPandas
. 主要思想很简单,Pandas UDF 分组数据允许在数据集的每一组中进行操作。由于 spark 中的分组操作是跨集群节点计算的,因此我们可以以允许在不同节点计算不同模型的方式操作我们的数据集。是的,我的兄弟们……永远不要低估一个groupBy
.
配置
在进入应用 Pandas UDF 的细节之前,让我们用一些模块、全局变量和常用函数设置环境。
第一步是导入将在这个小实验中使用的所有模块。
import pandas as pd
from catboost import CatBoostClassifier
from itertools import product
from pyspark.sql import DataFrame
from pyspark.sql