【发布时间】:2017-09-18 14:14:52
【问题描述】:
我有一个如下所示的 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()
如何将 ColumnName 转换为 Array[Long] 以使用此 udf?我已经在我的 scala 代码中分别拥有 knownIds 数组,因此 knownIds 不是数据框列。
【问题讨论】:
-
你可能想看看
array_contains。 -
当我必须寻找两个数组之间的交集时没有帮助。
-
你写的是一个Scala方法。尝试编写像
val arr_intersect = udf ( (seq1: Array[Long] , seq2: Array[Long]) => !(seq1.intersect(seq2).isEmpty) )这样的 UDF -
其实我把这个foo方法注册为udf并试了一下。我之前没有在我的问题中提供这些细节,现在我更新了我的问题。
标签: apache-spark apache-spark-sql spark-dataframe