我需要从存储在HDFS中的制表符提交文件中提取几列。
我可以从HDFS读取到RDD并将行拆分成列表,但我不知道如何获取我关心的列。
我的代码:
raw_file = sc.textFile("hdfs.......tsv")
rdd = raw_file.map(lambda line: line.split('\t'))
newfile中的每一列包含相同类型的内容,我想提取第26,80,109,452列并将它们放入列表中。
我试过了:
filtered = rdd.filter(lambda line: append(line[26]), append(line[80]), append(line[109], append(line[452])).collect()
但显然没有追加方法。那我该怎么办?
答案 0 :(得分:0)
过滤器用于根据某些条件返回或忽略行。
rdd = sc.range(10)
even = rdd.filter(lambda x: x % 2 == 0)
even.collect()
# Out: [0, 2, 4, 6, 8]
您正在寻找的是地图。 Map用于转换(或在您的情况下提取部分)一行。让我们以字母列表的rdd为例。如果我只想要第1,第3和第5个元素(列),我可以使用地图来提取它们。
rdd = sc.range(2).map(lambda i: ["a", "b", "c", "d", "e", "f"])
print rdd.collect()
# [['a', 'b', 'c', 'd', 'e', 'f'], ['a', 'b', 'c', 'd', 'e', 'f']]
mapped = rdd.map(lambda r: [r[1], r[3], r[5]])
print mapped.collect()
# [['b', 'd', 'f'], ['b', 'd', 'f']]
过滤器对行进行操作,Map对行行
中的数据进行操作