处理 Spark 地图函数中的坏项

Handling bad items in map function in Spark

在 Spark 中处理 map 函数异常的优雅方法是什么?

例如:

exampleRDD= ["1","4","7","2","err",3]
exampleRDD=exampleRDD.map(lambda x: int(x))

这将不起作用,因为它会在 "err" 项上失败。

如何过滤掉错误的行并在其余行上执行 map,而不是预料到我会在每一行中遇到的那种错误?

可以做一些类似定义函数的事情:

def stringtoint(x):
    try:
        a=int(x)
    except:
        a=-99
    return a

然后 filter/map。但这似乎并没有那么优雅。

你可以直接应用过滤器然后映射

示例 Scala 代码

exampleRDD.filter(r=>NumberUtils.isNumber(r)).map(r=> int(r))

或使用平面图

exampleRDD.flatMap(r=> {if (NumberUtils.isNumber(r)) Some(int(r)) else  None})