在Spark中广播大(GB)变量,命中Integer.MAX_VALUE。替代方案?

时间:2015-10-21 10:25:55

标签: apache-spark rdd

我正在编写一个Spark程序,它对数据集执行全部操作。我zippedWithIndex我的数据集和生成和RDD与索引(0..N)的笛卡尔积,以便它包含每个可能的组合对。然后,我收集并广播要用作查找表的数据集,并在笛卡尔对RDD上执行操作。它工作得很漂亮,非常快。

问题在于,即使我有足够的内存来容纳每个节点中的大型数据集,只要它超过几GB,我在广播它时会得到一个异常,说它的大小超过了Integer.MAX_VALUE。

有没有办法配置Spark以允许我进行这样的广播?

直接在整个数据集上执行笛卡尔积不在表中,因为这相当于无法管理的RDD。也许连接是要走的路,但是需要其中两个,我不能想到一个有助于它的分区方案。它可能与笛卡尔产品一样或更高。

我是否有可能失踪?

编辑:

数据集由MLLib LabeledPoints组成。具有数百万个点的GB数据集的笛卡尔积可能会产生大量数据,这使得它变得不可行。我描述的查找表方法有更多的内存(和时间)效率。

0 个答案:

没有答案