获得运行时错误
我有一个看起来像这样的UDF:
def foo : (ids: Array[Long], knownIds: Array[Long]) : Boolean = {
for (knownId <- knownIds) {
if(ids.contains(knownId)) {
return true;
}
}
return false;
}
,我的数据框看起来像这样:
|-- abc: binary (nullable = true)
|-- def: string (nullable = true)
|-- ids: array (nullable = true)
| |-- element: long (containsNull = true)
我称此udf如下:
def foo1 (ids: Array[Long]) => Boolean = foo(ids, knownIds)
val fooUdf = udf(foo1)
myDataFrame.filter(fooUdf($"ids")).count()
如何将列名施放到数组[long]以使用此UDF?我已经在Scala代码中分别拥有了Nownids数组,因此NewerID不是DataFrame列。
您可以使用lit
函数:
myDataFrame.filter(fooUdf($"ids", lit(knownIDs))).count()
其中lit
是org.apache.spark.sql.functions
的函数。
顺便说一句。您的UDF函数参数将为类型包装。最好将数组更改为SEQ,因为您将使用数组