我在PySpark中有一个名为animalRDD
的RDD,并且已经删除了头。标题为:animal, animalBreed, nickName, numberLegs
。
animalRDD如下所示:
[('Dog', 'Poodle', 'Rex', '4'), ('Cat', 'Tabby', 'Digger', 'XXX'), ('Horse', 'Stallion', 'Ozzie', ' '), ('Chicken', 'Rooster', 'Diesel', '2'), ('Bear', 'Black Bear', 'Bazza', '4')]
现在RDD中的每个元素都是一个字符串。我想映射RDD,使腿的数量变成一个整数。
我知道我可以使用以下内容转换为整数:
animalRDD.map(lambda x: (x[0], x[1], x[2], int(x[3])))
但是,数据中有一个字符串"XXX"one_answers"(空白(。有没有办法删除这两个无效点,这样返回的RDD就是这样?
[('Dog', 'Poodle', 'Rex', 4),('Chicken', 'Rooster', 'Diesel', 2), ('Bear', 'Black Bear', 'Bazza', 4)]
谢谢!
如果您不想在输出中删除"XXX"one_answers",可以使用类似的方法:
tup = [('Dog', 'Poodle', 'Rex', '4'), ('Cat', 'Tabby', 'Digger', 'XXX'), ('Horse', 'Stallion', 'Ozzie', ' '), ('Chicken', 'Rooster', 'Diesel', '2'), ('Bear', 'Black Bear', 'Bazza', '4')]
lst = [list(i) for i in tup]
for i in range(len(lst)):
try:
lst[i][3]=int(lst[i][3])
except ValueError:
lst[i] = lst[i]
如果你真的想把它们从列表中完全删除:
tup = [('Dog', 'Poodle', 'Rex', '4'), ('Cat', 'Tabby', 'Digger', 'XXX'), ('Horse', 'Stallion', 'Ozzie', ' '), ('Chicken', 'Rooster', 'Diesel', '2'), ('Bear', 'Black Bear', 'Bazza', '4')]
lst = [list(i) for i in tup]
for i in range(len(lst)):
try:
lst[i][3]=int(lst[i][3])
except ValueError:
del lst[i][3]
然后转换回元组:
tup = [tuple(i) for i in lst]
以下是过滤和映射的方法。
rdd.filter(lambda x: x[3].isdigit()).map(lambda x: (x[0], x[1], x[2], int(x[3]))).collect()
[('Dog', 'Poodle', 'Rex', 4),
('Chicken', 'Rooster', 'Diesel', 2),
('Bear', 'Black Bear', 'Bazza', 4)]