【问题标题】:Spark - pass column value to a udf and then get another column value inside udfSpark - 将列值传递给 udf,然后在 udf 中获取另一个列值
【发布时间】:2018-09-01 15:20:45
【问题描述】:

我正在尝试制作一个采用列值的 udf 函数,在该列值的条件下,我必须在该列中插入另一个列值。我的代码是这样的:

val udfMobileDeviceId = udf { (os_type: String) => 
    if (os_type == "android")  $"androidIdfa" else  $"appleIdfv"
}

【问题讨论】:

  • androidIdfaappleIdfv 是什么?它们是列还是字符串值?您应该考虑使用 when 函数而不是 udf

标签: scala apache-spark user-defined-functions


【解决方案1】:

要么将这些列传递给 udf:

val udfMobileDeviceId = udf { (os_type: String, androidIfa:String, appleIdfv:String) => 
    if (os_type == "android")  androidIdfa else  appleIdfv
}

甚至更好:不要为此使用 UDF,只需在 DataFrame API 中执行即可 :

df
.withColumn("mobileDeviceId", when($"os_type"==="andoid",$"androidIdfa").otherwise($"appleIdfv"))

【讨论】:

    猜你喜欢
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    • 2018-02-02
    • 2017-12-11
    • 2021-10-07
    相关资源
    最近更新 更多