Spark确实可以通过数据通过数据



当多个 withColumn函数链接时,火花会通过数据或多个通过数据吗?

例如:

val dfnew = df.withColumn("newCol1", f1(col("a")))
              .withColumn("newCol2", f2(col("b")))
              .withColumn("newCol3", f3(col("c")))

其中

  • df是我的输入DataFrame,至少包含列A,B,C
  • dfnew是输出DataFrame,带有三个新列newcol1,newcol2,newcol3
  • f1f2f3是一些用户定义的功能,或者是cast等列等上的一些火花操作,我甚至可以用foldLeft链接30个独立的withColumn功能。

重要

我在这里假设f2不取决于f1的结果,而f3不取决于f1f2的结果。这些功能可以按任何顺序执行。任何功能中都没有混乱

我的观察结果

  • 所有功能都处于同一阶段
  • 新的withColumn的添加不会增加执行时间,以怀疑通过数据的其他段落。
  • 我已经测试过,例如单个SQLTransformer,其中包含所有函数的Select语句与每个功能的多个单独的SQLTransformer一个函数,并且执行时间相似。

问题

  • 对于每个withColumn,Spark会通过数据制作一三个段落吗?
  • 这是否取决于函数的类型f1f2f3?UDF与通用火花操作?
  • 如果功能f1f2f3在同一阶段,是否意味着它们在同一数据中?
  • 段落的数量是否取决于功能中的混乱?如果没有洗牌?
  • 如果我链withColumn函数foldLeft会更改段落数吗?
  • 我可以使用三个SQLTransformers或仅一个SQLTransformer进行类似的操作,其中所有三个转换在同一select_statement中。通过数据可以通过的数据有多少?
  • 基本上没关系,1和3段落的执行时间将相似?

spark会通过数据进行一次或三个段落,每次都会通过数据?

Spark将通过数据"制作一段"。为什么?因为Spark实际上没有做任何到达此代码时,它只是构建执行计划,它可以告诉它在dfnew被用过时该怎么办(即某些 Action ,例如countcollectwrite等)。然后,它将能够一次对每个记录一次计算所有功能。

它取决于函数的类型F1,F2,F3?UDF与通用火花操作?

no。

如果功能F1,F2,F3在同一阶段,是否意味着它们在同一数据中?

是。

段落的数量是否取决于功能中的混乱?如果没有洗牌?

几乎。首先,只要使用 caching / checkpointing ,数据的段落数将是在结果上执行的 actions 的数量newdf数据框架。然后,每个 shuffle 表示每个记录都是读取的,可能会在工人节点之间发送,可能会写入磁盘,然后再次读取。

如果我用flodleft链接collumn函数会更改段落的数量吗?

否。它只会改变上述计划的构建方式,但它不会影响该计划的外观(将是完全相同的计划),因此计算将保持不变。

我可以使用三个SQLtransFormers或仅在同一Select_statement中所有三个转换的SQLtransFormer进行类似的操作。有多少通过数据的数据?

再次,这不会有任何区别,因为执行计划将保持不变。

基本上没关系,1和3段落的执行时间将相似?

不确定这是什么意思数据和相同的集群设置)。

相关内容

  • 没有找到相关文章

最新更新