pyspark-rdd:将字符串Map到整数,删除无效数据

pw9qyyiw  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(418)

我在Pypark有个叫rdd的 animalRDD 标题已被删除。标题为: animal, animalBreed, nickName, numberLegs .
动物实验结果如下:

[('Dog', 'Poodle', 'Rex', '4'), ('Cat', 'Tabby', 'Digger', 'XXX'), ('Horse', 'Stallion', 'Ozzie', ' '), ('Chicken', 'Rooster', 'Diesel', '2'), ('Bear', 'Black Bear', 'Bazza', '4')]

现在rdd中的每个元素都是一个字符串。我想Maprdd,这样腿的数量就变成一个整数。
我知道我可以使用以下方法将其转换为整数:

animalRDD.map(lambda x: (x[0], x[1], x[2], int(x[3])))

但是,数据中有字符串“”和“”(空白)。有没有办法删除这两个无效点,以便rdd返回的结果是这样的?

[('Dog', 'Poodle', 'Rex', 4),('Chicken', 'Rooster', 'Diesel', 2), ('Bear', 'Black Bear', 'Bazza', 4)]

谢谢!

jfewjypa

jfewjypa1#

下面是过滤和Map的方法。

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)]
lx0bsm1f

lx0bsm1f2#

如果不希望在输出中删除“”和“”,则可以使用类似的方法:

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]

相关问题