scala – UDF的vs Spark sql vs列表达式性能优化
发布时间:2020-12-16 18:29:11 所属栏目:安全 来源:网络整理
导读:我知道UDF是Spark的完整黑盒子,不会尝试优化它.但是Column类型及其功能的使用将列在:( https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.sql.Column) 使该功能“适合”Catalyst Optimizer? 例如,UDF通过向现有列添加1来创建新
我知道UDF是Spark的完整黑盒子,不会尝试优化它.但是Column类型及其功能的使用将列在:(
https://spark.apache.org/docs/2.1.0/api/scala/index.html#org.apache.spark.sql.Column)
使该功能“适合”Catalyst Optimizer? 例如,UDF通过向现有列添加1来创建新列 val addOne = udf( (num: Int) => num + 1 ) df.withColumn("col2",addOne($"col1")) 相同的函数,使用Column类型: def addOne(col1: Column) = col1.plus(1) df.withColumn("col2",addOne($"col1")) 要么 spark.sql("select *,col1 + 1 from df") 他们之间的表现会有什么不同吗? 解决方法
通过一个简单的内存中的6个记录集,第二个和第三个选项产生相对相同的~70毫秒的性能,这比第一个好得多(使用UDF – 0.7秒):
val addOne = udf( (num: Int) => num + 1 ) val res1 = df.withColumn("col2",addOne($"col1")) res1.show() //df.explain() def addOne2(col1: Column) = col1.plus(1) val res2 = df.withColumn("col2",addOne2($"col1")) res2.show() //res2.explain() val res3 = spark.sql("select *,col1 + 1 from df") res3.show() 时间线: 在所有三种方法中,shuffle写入完全相同(354.0 B),而持续时间的主要差异是使用UDF时执行程序的计算时间: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- 利用axis生成webservice代码
- shell中通过ftp批量上传文件
- djngo快速实现--使用Bootstrap
- CXF之"@XmlType.name 和 @XmlType.namespace 为类分配不
- 在soapheader中添加自定义信息
- unix – 如何使用bc计算数字的对数?
- 20.1 shell脚本介绍 20.2 shell脚本结构和执行 20.3 date命
- typescript – Jasmine中的“provide”关键字,Angular2 RC.
- shell脚本介绍、shell脚本结构和执行、date命令用法、shell
- angularJs中筛选功能-angular.filter-1