我正在尝试调整一个流程来激发火花。
基本上,该过程分析来自 JDBC 数据源的批量数据
每条记录都有一个batchId,还有一个更高级别的groupId。
批次数量较大(提前未知)。
组数约为 100。
RAM 中可以容纳每个批次的记录数。
实际的分析代码并不重要,但它不适合reduceByKey或combineByKey的更具体的模型
我的想法是:
瓶颈似乎是 groupByKey,根据我的理解,它将强制进行洗牌(将数据写入磁盘) - 即使每个批次都包含在单个分区中。
另一种可能的方法是使用batchId进行分区,但这会创建非常大量的分区 - 因此会产生大量的查询
有没有办法在分区内按键执行分组?
还有其他可能的方法吗?
是的,您需要使用mapPartitions。您可以访问分区中所有记录的迭代器。您只需从那里编写 Scala 代码,就可以做您喜欢做的事情,包括构建批次 ID 到记录的映射。请注意,这必须适合内存,但如果重要的话,您可以随时减小分区大小。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)