如何使用scala将特定函数转换为apache spark中的udf函数? [复制]
Posted
技术标签:
【中文标题】如何使用scala将特定函数转换为apache spark中的udf函数? [复制]【英文标题】:How to convert a specific function to a udf function in apache spark with scala? [duplicate] 【发布时间】:2018-12-13 18:45:26 【问题描述】:我在 apache spark 中有一个使用 Scala 创建的数据框。此数据框有两列类型为 Array[String]。我编写了一个简单的函数,它采用这两列并返回单词的交集(返回常用单词的数量:Int)。 我的数据框的一个示例如下所示。
data frame example with its columns
功能如下:
def findNumberCommonWordsTitle(string1:Array[String], string2:Array[String]) =
val intersection = string1.intersect(string2)
intersection.length
我想将此函数转换为 udf 函数。我试过这个:
val fncwt=udf(findNumberCommonWordsTitle(_:Array[String],_:Array[String]))
finalDF.select(fncwt(finalDF("title_from_words"),finalDF("title_to_words"))).show(5)
但我收到如下错误:
error
错误信息说:Caused by: java.lang.ClassCastException: scala.collection.mutable.WrappedArray$ofRef cannot be cast to [Ljava.lang.String;
我做错了什么?我认为问题是类型不匹配,但我不确定。
之后,我想用上面函数的返回值在我的数据框上创建一个新的列。
我怎样才能做到这一点?我应该怎么做才能修复错误?
提前致谢
【问题讨论】:
【参考方案1】:函数应该是
def findNumberCommonWordsTitle(string1: Seq[String], string2: Seq[String]) =
...
参考:https://spark.apache.org/docs/2.3.0/sql-programming-guide.html#data-types
【讨论】:
我已对我的代码进行了此修改,但仍然出现错误!这次有些不同:org.apache.spark.SparkException: Failed to execute user defined function($anonfun$4: (array以上是关于如何使用scala将特定函数转换为apache spark中的udf函数? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
如何将折叠左侧运算符“:/”转换为scala中的foldLeft函数?
如何在 Apache Spark 中将 Scala UDF 转换为 Java 版本?
在 spark 和 scala 中,如何将数据框转换或映射到特定列信息?