我需要使用pyspark从rdd中过滤出一些内容

qcbq4gxm  于 2021-06-02  发布在  Hadoop
关注(0)|答案(1)|浏览(306)

我需要从hdfs中存储的tab delmited文件中提取几个列。
我能够将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()

但显然没有append方法。那我该怎么办?

piztneat

piztneat1#

筛选器用于根据某些条件返回或忽略行。

rdd = sc.range(10)
even = rdd.filter(lambda x: x % 2 == 0)
even.collect()

# Out: [0, 2, 4, 6, 8]

你要找的是Map。Map用于转换(或在您的情况下提取部分)行。让我们以字母列表的rdd为例。如果我只需要第1、第3和第5个元素(列),我可以使用Map来提取它们。

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作用于行内的数据

相关问题