在pyspark中注册udf有什么好处?

伊拉

我有一个python函数,例如:

 def blank_as_null(x):
     return when(col(x) != "", col(x)).otherwise(None)

我使用此功能时并未udf(blank_as_null, StringType())按照文档中的建议运行http : //spark.apache.org/docs/2.2.0/api/python/pyspark.sql.html或此视频中:https : //youtu.be / AsW0QzbYVow?t = 42m33s(在42:33处您可以看到调用该udf函数的代码

然后我做类似的事情:

myData.withColumn('myColumn', blank_as_null('myColumn'))

先注册python函数会有什么好处吗?在什么情况下注册受益?什么时候没关系?还是在后台自动完成注册?

Martinarroyo

我认为您正在混合两种不同的转换:PySpark API转换和UDF:

  • PySpark API转换(由于缺少更好的名称)是使用PySpark提供的现有功能的任何东西。这些映射到Scala API,并在JVM中本地运行。这是你使用的是什么在你的示例代码(whenotherwise等)。
  • Spark API不能涵盖每个转换,因此Spark允许程序员定义自己的转换,这就是用户定义函数(UDF)的含义。您需要事先声明和注册它们,以便Spark知道期望的输入和输出数据。这种机制的优势在于,您可以定义任何转换而不受Spark API的限制。但是,它们将没有JVM副本,因此将以纯Python执行,从而增加了JVM与Python执行程序之间的通信开销。

由于性能原因,您应该始终将目标放在第一种类型的转换上,但是如果您尝试使用Spark API实现的转换不可行,则唯一的选择就是UDF。

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

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

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章