代码之家  ›  专栏  ›  技术社区  ›  y2k-shubham

联合降低JDBC读取并行性

  •  2
  • y2k-shubham  · 技术社区  · 8 年前

    我利用 Spark JDBC 功能如下:

    • 阅读 MySQL 桌子变成 DataFrame
    • 使改变 他们
    • 合并 他们
    • 写信给 HDFS

    在的整个生命周期内 数据帧 ,则, action 已执行 在上面。它过去工作正常,但最近我遇到了一些问题。幸亏 火花 惰性评估 这个 coalesce 导致 相似 的读取操作。


    所以如果我阅读 数据帧 使用 DataFrameReader.jdbc(..numPartitions..) 具有 numPartitions=42 ,然后 合并 it至6 partition 在写入之前,它会读取 数据帧 使用 并发性 共6个(仅激发6个查询到 MySQL ).我想重复一下,之前它使用read with 相似 第42页并执行 合并 之后

    我最近迁移到 Spark 2.3.0 在…上 EMR 5.13 ,这可能与此有关吗?是否有解决方法?

    1 回复  |  直到 8 年前
        1
  •  4
  •   Alper t. Turker    8 年前

    由于Spark的延迟计算,合并导致读取操作的并行性降低。

    这与懒惰无关。 coalesce 故意不创造 analysis barrier :

    但是,如果要进行剧烈合并,例如,将numPartitions=1,这可能会导致计算在比您喜欢的节点更少的节点上进行(例如,在numPartitions=1的情况下为一个节点)。为了避免这种情况,可以调用重新分区。这将添加一个洗牌步骤,但意味着当前上游分区将并行执行(无论当前分区是什么)。

    因此,只需遵循文档并使用 repartition 而不是 合并

    推荐文章