我有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中的异常。