我正在编写一个Spark程序,它对数据集执行全部操作。我zippedWithIndex我的数据集和生成和RDD与索引(0..N)的笛卡尔积,以便它包含每个可能的组合对。然后,我收集并广播要用作查找表的数据集,并在笛卡尔对RDD上执行操作。它工作得很漂亮,非常快。
问题在于,即使我有足够的内存来容纳每个节点中的大型数据集,只要它超过几GB,我在广播它时会得到一个异常,说它的大小超过了Integer.MAX_VALUE。
有没有办法配置Spark以允许我进行这样的广播?
直接在整个数据集上执行笛卡尔积不在表中,因为这相当于无法管理的RDD。也许连接是要走的路,但是需要其中两个,我不能想到一个有助于它的分区方案。它可能与笛卡尔产品一样或更高。
我是否有可能失踪?
编辑:
数据集由MLLib LabeledPoints组成。具有数百万个点的GB数据集的笛卡尔积可能会产生大量数据,这使得它变得不可行。我描述的查找表方法有更多的内存(和时间)效率。