如何使用withColumn将额外的参数传递给UDF

约翰·杜(John Doe):

如何使用withColumn将额外的参数传递给UDF

df = spark.createDataFrame([
  ["aaa","1"],
  ["bbb","2"],
  ["ccc","5"]
]).toDF("text","id")

def title(x,y):
   if y:
      x = x.title()
   return x

title_udf = udf(lambda x: title(x,y), StringType())
spark.udf.register('title_udf', title_udf)

df = df.withColumn('text_title',title_udf('text',True)

当我尝试这个时,我得到一个错误: Invalid argument, not a string or column....

拉古:

udf只能识别行元素。因此,要传递固定参数,您必须使用lit()函数。另外,您的udf定义也必须更正。试试这个:

import pyspark.sql.functions as F
from pyspark.sql.types import *
df = spark.createDataFrame([
  ["aaa","1"],
  ["bbb","2"],
  ["ccc","5"]
]).toDF("text","id")

def title(x,y):
   if y:
      x = x.title()
   return x

title_udf = F.udf(title, StringType())

df = df.withColumn('text_title',title_udf('text',F.lit(True)))

 df.show()
+----+---+----------+
|text| id|text_title|
+----+---+----------+
| aaa|  1|       Aaa|
| bbb|  2|       Bbb|
| ccc|  5|       Ccc|
+----+---+----------+

如注释中@powers所示,如果此输出是您的最终目的,则可以使用initcap()函数在没有udf的情况下执行此操作

df = df.withColumn("text_title",F.when(F.lit(True),F.initcap(F.col('text'))).otherwise(F.col('text')))

您还可以使用其他列作为条件,例如“ id”列

df = df.withColumn("text_title",F.when(F.col('id')>2,F.initcap(F.col('text'))).otherwise(F.col('text')))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在Spark SQL中将额外的参数传递给UDF?

JavaScript:如何将额外的参数传递给回调

如何将额外的参数传递给Python装饰器?

如何将额外的参数传递给 PyQt GUI 函数?

如何将额外的参数传递给点击事件?

如何将额外的参数传递给 Vision 框架?

使用 InvokeCommandAction 将额外的参数传递给命令

如何使用dplyr管道将额外参数传递给purrr :: map

将额外的参数传递给stat函数

将参数传递给 Scala udf

将参数传递给 pig udf 无法使用参数实例化

在withColumn下将数据框列和外部列表传递给udf

使用Colum将列表传递给UDF

Keras,如何将额外的参数传递给自定义损失函数?

如何将额外的参数传递给RxJS映射运算符

我如何将额外的参数传递给laravel中的控制器

Django Rest Framework:如何将额外的参数传递给Django序列化程序?

将额外的参数传递给ggplot2 geoms:使用省略号(...)

将额外的参数传递给身份验证网址

将额外的参数传递给XMLHttpRequest.onload

将额外的参数传递给回调函数

NodeJS将额外的参数传递给回调

将额外的参数传递给scrapy.Request()

将额外的参数传递给DataFlowOperator上下文

Django REST Framework-将额外的参数传递给动作

将额外的参数传递给TestCase安装程序

将额外的参数传递给jquery ajax promise回调

Django Rest Framework将额外的参数传递给Serializer

将额外的参数传递给分页扩展器