从Oracle收集大型表到Hadoop时,从collect()切换以避免java OOM

时间:2017-07-20 04:06:50

标签: apache-spark

背景
我试图使用从Oracle到Hadoop的大表来加载并以桌面格式存储表 由于表的加载时间太长,因此Oracle部分已过期。所以我的新方法是在where子句中与索引列的范围并行加载表。

所以我使用以下函数创建了一个稍后要在循环中使用的列表数组,但是当索引列" indexUsed"时似乎会有OOM。有太多的记录。有什么方法可以避免使用collect()?

distinctKeyValDf.sort("indexUsed").collect().map(_(0)).toList.sliding(recordNoInBatch, recordNoInBatch).toArray

这就是我现在正在处理的事情,但似乎类型是List [Nothing]而不是List [Any]

df.select(collect_list("indexUsed")).sort().first().getList(0).sliding(recordNoInBatch, recordNoInBatch).toArray  

最新更新:
我正在寻找数据帧的滑动函数,但没有弹出,所以我使用collect()将df更改为数组。但这会使java堆重载,所以我转而在df中使用collect_list,但似乎结果返回数组[nothing],这不是我想要的。我最终为索引列注册临时表,并创建一个for循环+一个do-while循环作为滑动函数的变通方法。

0 个答案:

没有答案