在spark sql反射函数中捕获异常



我有pyspark代码,可以解码url编码的字符串:

df.withColumn("clean_url", F.expr("""reflect("java.net.URLDecoder", "decode", url, "UTF-8")"""))

但有时它会得到包含非法字符的字符串,并抛出异常:

Caused by: java.lang.IllegalArgumentException: URLDecoder: Illegal hex characters in escape (%) pattern - For input string: "x"

如果字符串无法解码,我如何跳过这些异常并返回NULL?

我尝试了pyspark UDF函数来跳过异常,但在大量数据中,由于OOM错误和性能下降而出错。所以更喜欢使用内置sql函数。我不想用UDF重写scala中的整个代码来捕捉那个异常。我希望用sparksql函数来处理它。

您应该首先通过将%更改为%25来对字符串进行编码。

根据我的经验,当使用反射UDF调用Java函数时,我们无法自动跳过SQL中的异常。

最新更新