我想使用EMR和Spark处理以ORC格式生成的AWS S3库存报告,该报告包含许多ORC文件(数百个),所有数据的总大小约为250GB。
是否存在一种特定或最佳实践的方法来将所有文件读取到一个数据集中?好像我可以通过sqlContext.read().orc()
方法传递文件列表,但是我不确定如果传递大量文件的清单是否可以正确缩放/并行化。
最佳做法是什么?最终,我的目标是将所有文件的内容包含在一个数据集中,以便我可以对数据集运行sql查询,然后对结果调用.map
,以对该结果集进行后续处理。
预先感谢您的建议。
答案 0 :(得分:1)
只需指定一个orc文件所在的文件夹。 Spark将自动检测所有这些元素,并将其放入单个DataFrame中。
sparkSession.read.orc("s3://bucket/path/to/folder/with/orc/files")
您不必太在乎可伸缩性,因为一切都由Spark根据EMR depending on the EC2 instance type selected提供的默认配置完成。您可以尝试从属节点的数量及其实例类型。
除此之外,我建议将maximizeResourceAllocation设置为true
,以配置执行程序以利用每个从属节点上的最大资源。