在spark中使用UDF

时间:2017-08-10 05:45:00

标签: scala apache-spark apache-spark-sql

我有一个自定义的udf并在spark中注册。如果我尝试访问该UDF,它会抛出错误。无法访问。

我试过这样。

 spark.udf.register("rssi_weightage", FilterMap.rssi_weightage)
 val filterop = input_data.groupBy($"tagShortID", $"Timestamp", $"ListenerShortID", $"rootOrgID", $"subOrgID").agg(first(rssi_weightage($"RSSI").as("RSSI_Weight")))

首先显示错误(rssi_weightage($“RSSI”)//找不到rssi_weightage错误

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:2)

这不是你使用udf的方式,实际的udf是来自spark.udf.register的返回值。所以你可以这样做:

val udf_rssii_weightage = spark.udf.register("rssi_weightage", FilterMap.rssi_weightage)

val filterop = input_data.groupBy($"tagShortID", $"Timestamp", $"ListenerShortID", $"rootOrgID", $"subOrgID").agg(first(udf_rssi_weightage($"RSSI")).as("RSSI_Weight"))

但是在你的情况下你不需要注册udf,只需使用org.apache.spark.sql.functions.udf将常规函数转换为udf:

val udf_rssii_weightage = udf(FilterMap.rssi_weightage)