有没有办法在mapPartitions()
?
目前我这样使用它:
myRDD.mapPartitions{
iter: iterator[InputType] => {
val additionalData = <some costly init operation>
val results = ArrayBuffer[OutputType]()
for(input: InputType <- iter) results += (transform(input, additionalData))
results.iterator
}
}
但是当然如果分区太大,results
数组将抛出OOM异常。
所以我的问题是:有没有办法每隔一段时间发送一次部分结果,以避免任何OOM?
我想坚持mapPartitions
,因为我在处理输入之前初始化一个代价高昂的对象(例如获取一个大的广播变量的值),而我不希望在每个记录中都这样做map
1}}
答案 0 :(得分:1)
如果additionalData
无法访问迭代器,您只能map
:
myRDD.mapPartitions{
iter: iterator[InputType] => {
val additionalData = ???
iter.map(input => transform(input, additionalData))
}}