在本文中,我们将探讨 UDF(User Defined Functions,用户自定义函数)以及如何在 Python Spark 中编写它们。UDF 代表用户自定义函数。UDF 允许我们直接在 Python 的 Dataframes(数据框)和 SQL 数据库中应用函数,而无需单独注册它们。它还可以帮助我们通过 UDF 将函数应用到数据框的一个或多个列,从而为数据框创建新列,因此它扩展了我们的数据框功能。它可以使用 udf() 方法来创建。
udf(): 此方法将使用 lambda 函数来遍历数据,其参数将接受该 lambda 函数,而 lambda 的值将成为我们要创建为 UDF 的函数的参数。
示例 Pyspark 数据框
让我们创建一个数据框,这个数据框的主题将是学生的姓名,以及他/她在满分 100 分的考试中的原始分数。
Python3
CODEBLOCK_5eb36b1c
输出:
创建示例函数
现在,我们需要编写一个函数。为了便于理解,我们将编写一个简单的函数,它将拆分列并检查,如果该列中的遍历对象(等于 ‘J‘(大写 J)或 ‘C‘(大写 C)或 ‘M‘(大写 M)),那么它将把该单词的第二个字母转换为大写形式。此代码的实现如下:
Python3
CODEBLOCK_26a42b72
从示例函数制作 UDF
现在,我们将其转换为我们的 UDF 函数,这将反过来减少我们在数据处理上的工作量。为此,我们在 UDF 内部使用 lambda。
Python3
CODEBLOCK_0ebed0d1
在数据框上使用 UDF
接下来我们要使用的是 INLINECODE4ee6d4a0,请记住 INLINECODE6956b1cf 将返回一个完整的数据框。因此我们将仅使用现有的 INLINECODE567a9f56 数据框,返回的值也将存储在 INLINECODEc0e3fa12 中(基本上我们将对其进行追加)。
Python3
CODEBLOCK_0b7871f8
输出:
注意: 我们也可以一步完成所有这些操作。
使用注解的 UDF
现在,一种更快捷、更聪明的方法是使用 “注解”(或装饰器)。这将用更少的步骤创建我们的 UDF 函数。为此,我们要做的就是在 udf 函数前使用 @ 符号(装饰器),并在其参数部分给出函数的返回类型,即指定返回类型为 IntegerType()、StringType() 等。
Python3
CODEBLOCK_d66dc614
输出:
示例:
现在,让我们假设学校里有一种评分方案,根据学生分数的平方根加 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