如何从RDD中映射提取指定的第2列和第8列?
解决RDD提取指定两列的问题
要仅提取第2列(对应索引1)和第8列(对应索引7),可以在map的lambda函数中直接指定这两个索引,将它们封装成列表或元组返回即可:
# 提取为列表形式 DefenseList = noHeader.map(lambda x: [x.split(",")[1], x.split(",")[7]]) DefenseList.collect() # 或者提取为元组(更节省内存) DefenseList = noHeader.map(lambda x: (x.split(",")[1], x.split(",")[7])) DefenseList.collect()
如果担心重复调用split影响效率,可以先拆分一次再取值:
# 多行lambda写法(需注意语法格式) DefenseList = noHeader.map(lambda x: (lambda p: [p[1], p[7]])(x.split(",")))
原理很简单:x.split(",")会把每行数据拆分成列的列表,Python列表采用0索引,第2列对应索引1,第8列对应索引7,直接选取这两个位置的元素并组合成新结构,就能得到只包含目标两列的RDD。
内容的提问来源于stack exchange,提问作者Osita
相关产品推荐
相关产品推荐

