我想了解udf在pyspark的工作。每当我们在数据帧上使用udf时,是否会打开python shell?
UDF可以通过两种方式提供给PySpark。
UDF可以在Scala中定义并使用PySpark运行
UDF可以在Python中定义并由PySpark运行
在第一种情况下,UDF将作为Executor JVM本身的一部分运行,因为UDF本身是在Scala中定义的。没有必要创建python进程。
在每个执行程序的第二种情况下,将启动python进程。数据将在执行程序和python之间进行序列化和反序列化以进行处理。这会对spark作业产生很大的性能影响和消耗。
通常最好使用基于Scala的UDF,因为它们会为您提供更好的性能。
在spark 2.x中有一种叫做Pandas Udf(矢量化UDF)的东西。它们是使用Pandas(使用apache箭头转换数据帧)实现的。基本上你在python中编写代码但是代码是使用pandas转换和运行的。这大大提高了Python中UDF的性能。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。