key-value型RDD的value为列表时如何筛选其中的浮点型元素
实现方案
你现在需要对RDD每个元素的value列表做遍历筛选,根据你最终需要的返回格式,有两种常用实现:
- 保留原key,返回
(key, [筛选后的浮点值列表])结构的RDD,用map算子实现:
# 自定义is_float函数已提前定义的前提下 result_rdd = rdd.map(lambda item: (item[0], [elem for elem in item[1] if is_float(elem)]))
如果需要过滤掉浮点值列表为空的记录,追加filter算子即可:
result_rdd = rdd.map(lambda item: (item[0], [elem for elem in item[1] if is_float(elem)])).filter(lambda x: len(x[1]) > 0)
- 把所有浮点值展开为独立元素,用
flatMap算子实现:
仅提取所有浮点值、不保留对应key的写法:
保留对应key、返回float_only_rdd = rdd.flatMap(lambda item: [elem for elem in item[1] if is_float(elem)])(key, 单个浮点值)结构的写法:key_float_rdd = rdd.flatMap(lambda item: [(item[0], elem) for elem in item[1] if is_float(elem)])
上述写法和你原来的单元素判断逻辑完全兼容,只是增加了一层对value列表的遍历筛选。
内容的提问来源于stack exchange,提问作者carbassot
相关产品推荐
相关产品推荐

