scala - 以下是否在火花中为每一行的每个执行程序创建一个新对象?
问题描述
我有以下示例
class Add() { val adding = 2; def getVal = 1 + adding }
val a = List(1,2,3).toDF
a.filter(col("value") === new AddOne().getVal).show()
这会在每个执行程序上为每个行/数据点创建一个新对象(AddOne)吗?
解决方案
不,它只会在驱动程序上创建一次。
这是===
方法的简化代码
def === (other: Any): Column = {
val right = Literal.create(other)
EqualTo(expr, right)
}
expr
你在哪里col("value")
将被实际值替换并且right
是可折叠的文字。
如果您有一些疑问,请使用df.explain(true)
它将帮助您了解将要执行的操作。
在你的情况下:
== Parsed Logical Plan ==
'Filter ('value = 3)
+- LocalRelation [value#1]
推荐阅读
- bash - bash 输出对复杂变量执行某些操作,使其不可读
- html5-audio - 是否可以使用 HTML5 音频元素播放 RingCentral 通话录音?
- python - 如何快速加载许多 .npy 文件
- javascript - Thymeleaf 将对象传递给 javascript 并访问它的属性:未定义
- android - Flutter中JSON字符串中的特殊符号或单引号或撇号
- android - Android如何使用BroadcastReceiver查找拨出电话已参加
- javascript - 在 Aurelia 中动态切换网站图标,最好使用绑定
- excel - VBA 与 & 的连接会导致问题,因为字符串也有 &
- javascript - IF 条件 (js)
- sql - SQL Server 游标每行更新非常慢,其中包含存储过程