spark 当中,被 cache 的 RDD 的引用是否可以存到 HashMap 里?

问答 七里芬芳 ⋅ 于 2019-03-12 10:33:28 ⋅ 最后回复由 青牛 2019-03-12 16:33:00 ⋅ 1727 阅读

这是稍微简化了的一个代码片段,这个函数每次要根据 dayid 调用 getList, 本质上是去 hive 里读取对应的 partition 然后做后续计算. 但是这个函数可能在一个 job 中以相同的 dayid 被调用多次(也可能是其他 dayid). 所以为了让被 cache 的 rdd 被重复使用,我想把 dayid&rdd 保存到一个 HashMap 里. UserFilter 是一个伴生对象, rddMap 是一个伴生对象里的mutable.Map. 但是根据打印的日志, dayid&listRDD并没有被成功插入到rddMap 里.写这段代码之前确实也觉得可能不能成功,在我理解,毕竟 RDD 并不是内存里一个对象,而是定义了计算出这个 RDD 的计算流. 那么想要实现我想要做的功能应该怎么写?

var listRDD: RDD[(Int, None.type)] = sc.emptyRDD
if (UserFilter.rddMap.get(dayid) == None) {
listRDD = getList(hc, dayid).map(userid => (userid, None))
listRDD.cache()
UserFilter.rddMap.+((dayid, listRDD))
LOGGER.info("The size of map:" + UserFilter.rddMap.size)
} else {
listRDD = UserFilter.rddMap.get(dayid).get
}

成为第一个点赞的人吧 :bowtie:
回复数量: 1
  • 青牛 国内首批大数据从业者,就职于金山,担任大数据团队核心研发工程师
    2019-03-12 16:33:00

    你这个代码咋没有action操作?

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,可用Emoji的自动补全, 在输入的时候只需要 ":" 就可以自动提示了 :metal: :point_right: 表情列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif,教程
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter