如何迭代包含List[B]的RDD[A],提取B属性并关联A属性?
如何从包含List集合的对象中提取关联字段?
嘿,这个需求我熟!你要处理的是包含对象B列表的对象A,想把每个A的信息和它对应的每个B的特定字段(比如B.id)关联起来,用Spark的flatMap搭配内层map的写法完全正确,我给你拆解下为啥这么好用:
- 外层的
flatMap是关键:它会把每个A对象"拆解"——因为每个A对应多个B,flatMap不会把整个B列表当成一个元素输出,而是把每个B都转换成独立的元素,正好实现了你要的双重遍历效果。 - 内层的
map负责关联:针对每个A里的listB,把每个B转换成和A.id配对的元组,这样就把A的标识和它对应的每个B的标识绑定在一起了。
直接用你给出的示例代码就可以实现:
rddA.flatMap( a => a.listB.map( b => (a.id, b.id) ) )
要是你需要提取B的其他字段也很灵活,比如想关联A的名称和B的数值,只要改成(a.name, b.value)就行,逻辑完全通用。
内容的提问来源于stack exchange,提问作者Guillermo Teixeira
相关产品推荐
相关产品推荐

