如何正确(可缩放)将许多 ORC 文件读入 spark

How to properly (scale-ably) read many ORC files into spark

我想使用 EMR 和 Spark 处理以 ORC 格式生成的 AWS S3 清单报告,该报告包含许多 ORC 文件(数百个),所有数据的总大小约为 250GB。

是否有特定或最佳实践方法将所有文件读入一个数据集?似乎我可以向 sqlContext.read().orc() 方法传递一个文件列表,但我不确定如果我向它传递一个包含数百个文件的大列表,这是否会 scale/parallelize 正确。

执行此操作的最佳实践方法是什么?最终我的目标是将所有文件的内容都放在一个数据集中,这样我就可以 运行 对数据集进行 sql 查询,然后对结果调用 .map 以进行后续处理结果集。

提前感谢您的建议。

只需指定您的 orc 文件所在的文件夹。 Spark 将自动检测所有这些并将放入单个 DataFrame。

sparkSession.read.orc("s3://bucket/path/to/folder/with/orc/files")

您不必太在意可伸缩性,因为一切都是基于 EMR depending on the EC2 instance type selected 提供的默认配置由 spark 完成的。不过,您可以试验从属节点的数量及其实例类型。

除此之外,我建议将 maximizeResourceAllocation 设置为 true 以配置执行程序以在每个从属节点上利用最大资源。