我们说我有以下架构:
<record>
<long name="update"/>
<string name="dc"/>
<array name="clients">
<record>
<string name="ip"/>
<array name="client_ids">
<string name="client_id"/>
</array>
</record>
</record>
现在,正在使用具有多个shuffle分区的分布式查询来计算clients列。结果应该是包含信息的1个文件,并在其中&#34;更新&#34;和&#34; dc&#34;应该只出现一次,而不是每一行。
我尝试的是:
val rdd = sql.sql(s"query to generate the clients column")
.map(some_adjustments)
.repartition(1)
.mapPartitions { rowsIt =>
val clients = rowsIt.toArray
val result = mutable.WrappedArray.make[Row](Array(Row(update, dc,mutable.WrappedArray.make[Row](clients))))
result.iterator
}
这样可行,但结果是OutOfMemory,可能是由于rowsIt.toArray。 执行相同的重新分区(1)但在每行上更新/ dc重复运行顺利。