如何在 Python 中编写 Spark UDF(用户自定义函数)?

在本文中,我们将探讨 UDF(User Defined Functions,用户自定义函数)以及如何在 Python Spark 中编写它们。UDF 代表用户自定义函数。UDF 允许我们直接在 Python 的 Dataframes(数据框)和 SQL 数据库中应用函数,而无需单独注册它们。它还可以帮助我们通过 UDF 将函数应用到数据框的一个或多个列,从而为数据框创建新列,因此它扩展了我们的数据框功能。它可以使用 udf() 方法来创建。

udf(): 此方法将使用 lambda 函数来遍历数据,其参数将接受该 lambda 函数,而 lambda 的值将成为我们要创建为 UDF 的函数的参数。

示例 Pyspark 数据框

让我们创建一个数据框,这个数据框的主题将是学生的姓名,以及他/她在满分 100 分的考试中的原始分数。

Python3


CODEBLOCK_5eb36b1c

输出:

!image

创建示例函数

现在,我们需要编写一个函数。为了便于理解,我们将编写一个简单的函数,它将拆分列并检查,如果该列中的遍历对象(等于 ‘J‘(大写 J)或 ‘C‘(大写 C)或 ‘M‘(大写 M)),那么它将把该单词的第二个字母转换为大写形式。此代码的实现如下:

Python3


CODEBLOCK_26a42b72

从示例函数制作 UDF

现在,我们将其转换为我们的 UDF 函数,这将反过来减少我们在数据处理上的工作量。为此,我们在 UDF 内部使用 lambda。

Python3


CODEBLOCK_0ebed0d1

在数据框上使用 UDF

接下来我们要使用的是 INLINECODE4ee6d4a0,请记住 INLINECODE6956b1cf 将返回一个完整的数据框。因此我们将仅使用现有的 INLINECODE567a9f56 数据框,返回的值也将存储在 INLINECODEc0e3fa12 中(基本上我们将对其进行追加)。

Python3


CODEBLOCK_0b7871f8

输出:

!image

注意: 我们也可以一步完成所有这些操作。

使用注解的 UDF

现在,一种更快捷、更聪明的方法是使用 “注解”(或装饰器)。这将用更少的步骤创建我们的 UDF 函数。为此,我们要做的就是在 udf 函数前使用 @ 符号(装饰器),并在其参数部分给出函数的返回类型,即指定返回类型为 IntegerType()、StringType() 等。

Python3


CODEBLOCK_d66dc614

输出:

!image

示例:

现在,让我们假设学校里有一种评分方案,根据学生分数的平方根加 3 来校准分数(即他们的分数将按 15 分制进行校准)。因此,我们将定义一个 UDF 函数,并且这次我们将指定返回类型。即浮点数据类型。所以,这个函数的声明将是——

Python3


CODEBLOCK_38e0b59d

现在,我们将定义一个 udf,其返回类型将始终是浮点数,即我们强制该函数以及 UDF 仅以浮点数的形式给我们结果。这个函数的定义将是 –

Python3


CODEBLOCK_e582290c

udf 的第二个参数 INLINECODE792c0213 将始终强制 UDF 函数仅以浮点类型返回结果。现在,我们将在数据框的 INLINECODEd8579a5c 列上使用我们的 udf 函数 INLINECODE52a9f6df,并产生一个名为 INLINECODE40d4a53b 的新列,这将是该列的默认命名。这段代码看起来像 –

Python3


CODEBLOCK_fc897b62

输出:

![image](https://media.geeksforgeeks.org/wp-content/uploads/2021053011

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/49779.html
点赞
0.00 平均评分 (0% 分数) - 0