繁体   English   中英

在火花中使用UDF

[英]UDF usage in spark

我有一个自定义的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错误

任何帮助将不胜感激。

这不是您使用spark.udf.register ,实际的spark.udf.registerspark.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)

我想您在定义udf函数的方式上有问题,下一个快照在udf公告中的方法稍有不同-它是直接定义的函数:import org.apache.spark.sql.functions._

val data = sqlContext.read.json(sc.parallelize(Seq("{'foo' : 'Bar'}", "{'foo': 'Baz'}")))

val example = Seq("Bar", "Bazzz")
val urbf = udf { foo: String => if (example.contains(example)) 1 else 0 }

data.select($"foo", urbf($"foo")).show

+--------+-------------+
|  foo   |UDF(foo)     |
+--------+-------------+
|  Bar   |            1|
|  Bazzz |            0|
+--------+-------------+

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM