当键值rdd为列表时,筛选该值



我有这样的元组:

('id1', ['date', 'type', 'value', '2017-11-11 08:32:46.934', 'no_error', '54.64325', '2017-11-11 08:32:47.356', 'no_error', '76.34553']

我只想检索浮动的元素。我只找到了解决方案,如果值只是一个元素而不是一个列表,则使用以下内容:

filter(lambda t: is_float(t[1]) == True)

is_float是我创建的一个函数,顾名思义,如果值是float,它将返回true。我该怎么解决?

您可以通过if子句的列表理解来实现它:

def is_float(s):
try:
float(s)
return True
except ValueError:
return False
rdd.map(lambda key, list_value: (key, [element for element in list_value if is_float(element)]))

不过,这不会很有表演性。

更新:我修改了代码以包含OP的注释,即列表元素是字符串。

这就是isinstance()的作用。如果第一个参数是第二个参数的实例,它将返回True

>>> isinstance(1, float)
False
>>> isinstance("1.0", float)
False
>>> isinstance(1.0, float)
True

最新更新