【问题标题】:UDF in Spark 1.6 Reassignment to val errorSpark 1.6中的UDF重新分配给val错误
【发布时间】:2019-09-19 18:25:22
【问题描述】:

我使用的是 Spark 1.6

下面的udf是用来清理地址数据的。

sqlContext.udf.register("cleanaddress", (AD1:String,AD2: String, AD3:String)=>Boolean = _.matches("^[a-zA-Z0-9]*$"))

UDF 名称:cleanaddress 三个输入参数来自 DataFrame 列,(AD1、AD2 和 AD3)。

请有人帮我解决以下错误。

我正在尝试编写接受三个参数(数据帧的 3 个地址列)的 udf,计算并仅提供过滤器记录。

Error:
Error:(38, 91) reassignment to val
    sqlContext.udf.register("cleanaddress", (AD1:String, AD2: String, AD3:String)=>Boolean = _.matches("^[a-zA-Z0-9]*$"))

【问题讨论】:

    标签: apache-spark apache-spark-1.6


    【解决方案1】:

    根据您给定的代码,您的逻辑不是很清楚。您可以做的是返回一个有效地址数组,如下所示:

    sqlContext.udf.register("cleanaddress", (AD1:String, AD2: String, AD3:String)=> Seq(AD1,AD2,AD3).filter(_.matches("^[a-zA-Z0-9]*$")))
    

    请注意,这将返回一个复杂的列(即一个数组)

    【讨论】:

    • 您好先生,我正在尝试做这样的事情。将函数传递给每一列。 sqlContext.udf.register("cleanaddress", (AD:String)=> Seq(AD).filter(_.matches("^[a-zA-Z0-9]*$"))),但如果值为非字母数字,而不是被 NULL 或空字符串替换。如果我们可以修改功能,请帮助我。非常感谢
    猜你喜欢
    • 2014-08-07
    • 1970-01-01
    • 2020-11-14
    • 1970-01-01
    • 2018-05-02
    • 2019-12-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多