ast*_*asz 4 scala apache-spark apache-spark-sql
当多个withColumn
函数被链接时,Spark是否会对数据进行一次或多次传递?
例如:
val dfnew = df.withColumn("newCol1", f1(col("a")))
.withColumn("newCol2", f2(col("b")))
.withColumn("newCol3", f3(col("c")))
Run Code Online (Sandbox Code Playgroud)
哪里
df
是我的输入DataFrame
至少包含列a,b,cdfnew
输出DataFrame
三个新列newCol1,newCol2,newCol3f1
,f2
,f3
有一些用户定义的函数或像蒙上了,等在我的项目列了一些火花的操作,我可以有甚至30独立的withColumn
功能链接与foldLeft
.重要
我在这里假设f2
不依赖于结果f1
,f3
而不依赖于f1
和的结果f2
.可以按任何顺序执行这些功能.任何功能都没有随机播放
我的观察
withColumn
不会增加执行时间,从而怀疑通过数据传递额外的段落.SQLTransformer
包含所有函数的select语句和SQLTransformer
每个函数的多个独立函数,并且执行时间类似.问题
withColumn
吗?f1
,f2
,f3
?UDF与泛型Spark操作?f1
,f2
,f3
在同一阶段内,这是否意味着他们是在同一个数据传递?withColumn
函数链接函数foldLeft
会改变段落的数量吗?SQLTransformers
或只有一个SQLTransformer
与所有三个转换做类似的事情.通过数据传递了多少?火花会通过数据进行一到三次传递,每次传递一次吗?
Spark将通过数据"制作一段".为什么?由于火花实际上并没有做任何事情达到此代码时,它只是建立一个执行计划,这将告诉它什么时候做什么dfnew
是使用(即一些动作,例如count
,collect
,write
等)就可以被执行.然后,它将能够为每个记录一次计算所有功能.
它取决于函数f1,f2,f3的类型吗?UDF与泛型Spark操作?
没有.
如果函数f1,f2,f3在同一个阶段内,是否意味着它们在同一个数据传递中?
是.
段落的数量是否取决于功能内的随机播放?如果没有洗牌?
几乎.首先,只要不使用缓存/检查点,数据上的段落数就是在生成的DataFrame 上执行的操作数newdf
.然后,每次shuffle意味着读取每个记录,可能在工作节点之间发送,可能写入磁盘,然后再次读取.
如果我用foldLeft链接withColumn函数会改变段落的数量吗?
不会.它只会改变上述计划的构建方式,但它不会影响该计划的外观(将是完全相同的计划),因此计算将保持不变.
我可以在同一个select_statement中使用三个SQLTransformer或只有一个SQLTransformer执行类似的操作.通过数据传递了多少?
同样,这不会有任何区别,因为执行计划将保持不变.
基本上没关系,执行的时间与1和3段相似?
不确定这意味着什么,但这样的声音是不正确的:执行时间主要是洗牌次数和动作次数的一个因素(假设相同的数据和相同的群集设置).
归档时间: |
|
查看次数: |
842 次 |
最近记录: |