sparklyr sdf_collect 和 dplyr 在 Spark 中的大表上收集函数需要很长时间 运行?

sparklyr sdf_collect and dplyr collect function on large tables in Spark takes ages to run?

我是 运行 R Studio 和 R 3.5.2。

我使用 sparklyr::spark_read_parquet 从 S3a 加载了大约 250 个 parquet 文件。

我需要从 Spark(由 sparklyr 安装)收集数据:

spark_install(version = "2.3.2", hadoop_version = "2.7")

但由于某种原因,完成这项工作需要很长时间。有时任务会分配给所有 CPU,有时只有一个工作:

请告知您将如何解决 dplyr::collectsparklyr::sdf_collect "running ages" 问题。

另请理解,我无法为您提供数据,如果数据量很小,它的工作速度会非常快。

这是预期的行为。 dplyr::collectsparklyr::sdf_collect 或 Spark 原生的 collect 会将所有数据带到驱动程序节点。

即使可行(您需要的内存至少是数据实际大小的 2-3 倍,具体取决于场景)也必然需要很长时间 - 驱动程序网络接口是最明显的瓶颈.

在实践中,如果您要收集所有数据,跳过网络和平台开销并使用本机工具直接加载数据通常更有意义(给出的描述是将数据下载到驱动程序并转换逐个文件到 R 友好格式文件)。