为了账号安全,请及时绑定邮箱和手机立即绑定

spark UDF 结果可以“显示”,但不能“过滤”

spark UDF 结果可以“显示”,但不能“过滤”

翻阅古今 2021-08-24 14:53:04
火花UDF的作品时,我做的show(),但它给了我的错误,当我做 filter的UDF结果。udf函数def chkInterPunctuation(sent) :    for char in sent[1:-2] :         if char in ["\"", "'", ".", "!", "?"] :            return True    return Falsecip = udf(chkInterPunctuation, BooleanType())show() 作品df_punct = dfs.withColumn("in_length", length("input")).\withColumn("out_length", length("output")).withColumn("cip", cip(col("input")))df_punct.show()但是当我这样做时它给了我错误 filterdf_punct.where(col("cip") == True).show()我的谷歌搜索表明,py4j当UDF函数没有返回正确的值或有错误时,通常会发生错误。但我UDF function总是返回 true 或 false。此外,当我显示时,spark 查询会返回正确的值。这对我来说没有意义。可能的原因是什么?
查看完整描述

3 回答

?
慕工程0101907

TA贡献1887条经验 获得超5个赞

发生这种情况是因为您没有纠正NULL存在。尝试:


def chkInterPunctuation(sent) :

    if not sent: return   # In None return

    for char in sent[1:-2] : 

        if char in ["\"", "'", ".", "!", "?"] :

            return True

    return False


查看完整回答
反对 回复 2021-08-24
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

通过更新到 spark2.4.0 解决了问题。(我用的是 2.0.0)


查看完整回答
反对 回复 2021-08-24
  • 3 回答
  • 0 关注
  • 136 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信