我正在尝试获取完整文件路径的最后一个标记,我的代码看起来像
val testUdf = spark.udf.register("get_filename", (fullpath: String) => {
val lastIndex = fullpath.lastIndexOf("/")
fullpath.substring(lastIndex, fullpath.length - 1)}, DataTypes.StringType)
我得到一个错误:
Error:(39, 29) overloaded method value register with alternatives:
(name: String,f: org.apache.spark.sql.api.java.UDF22[_, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _, _],returnType: org.apache.spark.sql.types.DataType)Unit <and> ......
有人知道如何解决此问题吗?
谢谢
答案 0 :(得分:1)
没有采用Scala闭包和register
的{{1}}方法的变体(存在DataType
的变体,是为Java互操作性设计的)。
如果使用带寄存器的闭包,函数应返回可以通过反射映射为SQL类型的对象。您的情况很满意,因此只需省略数据类型:
org.apache.spark.sql.functions.udf