我的RDD中有TAB分隔的字符串。我正在尝试过滤它:如果第5列包含很少的字符串:
filt_data = raw_data.filter(lambda x: '' if len(x.split('\t')) < 5 else "apple" in x.split('\t')[4] or "pear" in x.split('\t')[4] or "berry" in x.split('\t')[4] or "cherry" in x.split('\t')[4])
我不认为它是非常有效的解决方案,因为我在那里做了4行同一行。 some1可以显示更优化的方式吗?
如果我有一系列“水果”怎么办?如何过滤包含此数组元素的RDD?
可以执行类似x.split('\t')[4] in array
的操作,但只有在数组元素等于第5列项时才会进行过滤,但我需要检查第5列是否包含数组中的任何字符串。
答案 0 :(得分:1)
你可以用一个“真实”的函数替换lambda函数,它可以有效地完成你喜欢的任何事情。 请参阅下面的建议解决方案的原型
def efficient_func(line):
if len(x.split('\t')) < 5:
return ''
word = line.split('\t')[4]
...
return ...
filt_data = raw_data.filter(efficient_func)
关于第二个问题 - 我认为使用一个“if”语句应该比使用几个“if”语句更好。 e.g。
fruits_array = ['apple','pear','berry','cherry']
if word in fruits_array:
do_something (or return some_value)