如何在火花中投射列到阵列[长]



我有一个看起来像这样的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()

其中litorg.apache.spark.sql.functions的函数。

顺便说一句。您的UDF函数参数将为类型包装。最好将数组更改为SEQ,因为您将使用数组

获得运行时错误

相关内容

  • 没有找到相关文章

最新更新