gpt4 book ai didi

apache-spark - 我可以在 sparkConf 中为不同的 sql 设置不同的 autoBroadcastJoinThreshold 值吗?

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

我有大数据帧: A(200g), B(20m), C(15m), D(10m), E(12m) ,我想加入他们: A 加入 B , C 加入 D 和 E 在同一个 SparkSession** 中使用 spark sql。就像:

absql:sql("select * from A a inner join B b on a.id=b.id").write.csv("/path/for/ab")
cdesql:sql("select * from C c inner join D d on c.id=d.id inner join E e on c.id=e.id").write.csv("/path/for/cde")

问题:

当我使用默认 spark.sql.autoBroadcastJoinThreshold=10m
  • absql 需要很长时间,原因是 absql skew。
  • cdesql 正常

  • 当我设置 spark.sql.autoBroadcastJoinThreshold=20m
  • C,D,E 将被广播,所有任务将在同一个执行器中执行,但仍然需要很长时间。
  • 如果设置 num-executors=200,则广播时间较长
  • absql 正常
  • 最佳答案

    而不是改变 autoBroadcastJoinThreshold ,您可以标记要广播的数据帧。通过这种方式,很容易决定应该广播或不广播哪些数据帧。

    在 Scala 中,它看起来像这样:

    import org.apache.spark.sql.functions.broadcast
    val B2 = broadcast(B)
    B2.createOrReplaceTempView("B")

    这里数据帧 B 已经被标记为广播,然后被注册为一个表以与 Spark SQL 一起使用。

    或者,这可以直接使用数据帧 API 完成,第一个连接可以写为:
    A.join(broadcast(B), Seq("id"), "inner")

    关于apache-spark - 我可以在 sparkConf 中为不同的 sql 设置不同的 autoBroadcastJoinThreshold 值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657871/

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