我有一个以地图为元素的 RDD。我当然不能使用 RDD.get。因此,到目前为止,我执行以下操作以从此映射中获取键的值:
val x = RDD.collect().flatten.toMap
接着
x.get(key)
获取密钥的值。现在,拥有一个很大的 rdd,因为我在 rdd 上应用.collect()时会输出错误java.lang.OutOfMemoryError: GC overhead limit exceeded
。不在 rdd 上应用.collect()怎么办?
2 回答
如果确实是
Map
s,则可以执行以下操作:尽管这仍将输出到驱动程序,但仅来自该键的值。因此,如果可以将其存储在内存中,那么您对此表示满意。但是,如果您仍然想将其作为 rdd 使用,则:
并且如果您想要键 AND 值,则可以将
flatMap
转换为过滤器,然后仅对key == myKey
进行过滤由于您无法将所有内容都安装到驱动程序中,因此您首先需要为需要查看的地图过滤 RDD,然后进行获取...