gpt4 book ai didi

scala - Spark 是否对多个 withColumn 的数据进行一次传递?

转载 作者:行者123 更新时间:2023-12-04 15:53:27 26 4
gpt4 key购买 nike

当多个 withColumn 时,Spark 是执行一次还是多次传递数据?函数是链式的?

例如:

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
  • f1 , f2 , f3是一些用户定义的函数或一些像强制转换等列上的 Spark 操作在我的项目中,我什至可以有 30 个独立的 withColumnfoldLeft 链接的函数.

  • 重要

    我在这里假设 f2不依赖于 f1 的结果, 而 f3不依赖于 f1 的结果和 f2 .这些功能可以按任何顺序执行。任何函数都没有shuffle

    我的观察
  • 所有功能都在同一阶段
  • 新增 withColumn不会以怀疑通过数据的其他 channel 的方式增加执行时间。
  • 我已经测试过例如单 SQLTransformer使用包含所有函数的 select 语句 vs 多个单独的 SQLTransformer每个函数一个,执行时间相似。

  • 问题
  • 将 spark 对数据进行一到三遍,每遍一次 withColumn ?
  • 是否取决于函数类型f1 , f2 , f3 ? UDF 与通用 Spark 操作?
  • 如果函数 f1 , f2 , f3在同一个阶段内,是否意味着它们在同一个数据传递中?
  • 段落数是否取决于函数内的洗牌?如果没有shuffle?
  • 如果我链接 withColumn函数与 foldLeft它会改变段落数吗?
  • 我可以用三个 SQLTransformers 做类似的事情或只有一个 SQLTransformer在同一个 select_statement 中使用所有三个转换。有多少数据可以通过呢?
  • 基本上没有关系,1和3段的执行时间会相似吗?
  • 最佳答案

    Will spark make one or three passages through the data, once for each withColumn?



    Spark 将通过数据“通过一次”。为什么?因为当到达这段代码时,spark 实际上并没有做任何事情,它只是构建了一个执行计划,告诉它在 dfnew 时该做什么。使用(即某些操作,例如 countcollectwrite 等)在其上执行。然后,它将能够为每个记录一次计算所有函数。

    Does it depend on the type of functions f1, f2, f3? UDF vs generic Spark operations?



    不。

    If the functions f1, f2, f3 are inside the same stage, does it mean they are in the same data pass?



    是的。

    Does number of passages depend on shuffles within functions? If there is no shuffle?



    几乎。首先,只要不使用缓存/检查点,通过数据的次数将是对结果 newdf 执行的操作数。数据帧。然后,每次 shuffle 意味着读取每条记录,可能在工作节点之间发送,可能写入磁盘,然后再次读取。

    If I chain the withColumn functions with foldLeft will it change number of passages?



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

    I could do something similar with three SQLTransformers or just one SQLTransformer with all three transformations in the same select_statement. How many passes through data that would do?



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

    Basically it doesn't matter, the time of execution will be similar for 1 and 3 passages?



    不确定这意味着什么,但听起来这不正确:执行时间主要是 shuffle 次数和操作次数的一个因素(假设相同的数据和相同的集群设置)。

    关于scala - Spark 是否对多个 withColumn 的数据进行一次传递?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47871874/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com