Closed Jolanrensen closed 2 years ago
The compiler is even smart enough to only have to type the bare minimum:
// UDFWrapper1
val stringArrayMerger by udf.register { it: WrappedArray<String> ->
it.toIterable().asKotlinIterable().joinToString(" ")
}
// UDFWrapper2
val stringArrayMerger2 by udf.register { a: WrappedArray<String>, b: Int ->
a.toIterable().asKotlinIterable().joinToString(" $b ")
}
:Okay, maybe it's better to not use delegates after all. The function is only registered after the delegate value is accessed, which does not happen when it's called from SQL for example... Better look for another notation :)
https://github.com/Kotlin/kotlin-spark-api/pull/152 handles it :)
UDFs are currently defined for example like:
They can then be invoked from SQL or directly in code like:
stringArrayMerger(testData.col("value"))
.Obviously the thing I notice is that
stringArrayMerger
is typed twice. This can of course be rewritten using delegates :)This is possible
when adding something like:
and for each UDF register function:
Just a thought :)