有什么方法可以使用 spark 从 s3 并行读取多个镶木地板路径?
Is there any way to read multiple parquet paths from s3 in parallel using spark?
我的数据存储在不同路径下的 s3(parquet 格式)中,我正在使用 spark.read.parquet(pathes:_*)
以便将所有路径读入一个数据帧。
不幸的是,spark 是顺序读取 parquet 元数据(一个接一个路径),而不是并行读取。
spark 读取元数据后,数据本身将被并行读取。但是元数据部分超级慢,而且机器没有得到充分利用。
有什么方法可以使用 spark 从 s3 并行读取多个 parquet 路径吗?
很高兴听到您对此的意见。
所以过了一段时间我发现我可以通过读取不同线程上的每条路径并合并结果来实现它。例如:
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 _)
我的数据存储在不同路径下的 s3(parquet 格式)中,我正在使用 spark.read.parquet(pathes:_*)
以便将所有路径读入一个数据帧。
不幸的是,spark 是顺序读取 parquet 元数据(一个接一个路径),而不是并行读取。
spark 读取元数据后,数据本身将被并行读取。但是元数据部分超级慢,而且机器没有得到充分利用。
有什么方法可以使用 spark 从 s3 并行读取多个 parquet 路径吗?
很高兴听到您对此的意见。
所以过了一段时间我发现我可以通过读取不同线程上的每条路径并合并结果来实现它。例如:
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 _)