[英]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.register
是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)
我想您在定义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.