【问题标题】:Is there any way to read multiple parquet paths from s3 in parallel using spark?有没有办法使用 spark 从 s3 并行读取多个镶木地板路径?
【发布时间】:2022-04-18 19:18:23
【问题描述】:

我的数据存储在不同路径下的 s3(镶木地板格式)中,我使用 spark.read.parquet(pathes:_*) 将所有路径读入一个数据帧。 不幸的是,spark 按顺序(一个接一个的路径)而不是并行读取 parquet 元数据。 在 spark 读取元数据后,数据本身会被并行读取。但是元数据部分超级慢,而且机器没有得到充分利用。

有没有办法使用 spark 从 s3 并行读取多个 parquet 路径?

很高兴听到您对此的意见。

【问题讨论】:

  • 这能回答你的问题吗? How to pass a list of paths to spark.read.load?
  • 不,我已经传递了一个路径列表并将它们一起加载。问题是每个路径元数据都在一个单独的阶段被读取。例如,如果我一起传递 5 条路径,它将被转换为 5 个不同的阶段,这些阶段将依次运行 - 这真的会破坏利用率。

标签: apache-spark hadoop amazon-s3 parquet


【解决方案1】:

所以一段时间后,我发现实现它的方法是读取不同线程上的每条路径并合并结果。例如:

val paths = List[String]("a","b","c")
val parallelPaths = paths.par
parallelPaths.tasksupport = new ForkJoinTaskSupport(new scala.concurrent.forkjoin.ForkJoinPool(paths.length))
paths.map(path => spark.read.parquet(path)).reduce(_ union _)

【讨论】:

    猜你喜欢
    • 2017-01-22
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2019-12-07
    • 1970-01-01
    • 2021-12-28
    • 2022-10-25
    • 2018-06-02
    相关资源
    最近更新 更多