我有两个以逗号分隔的字符串列(sourceAuthors和targetAuthors)。
val df = Seq(
("Author1,Author2,Author3","Author2,Author3,Author1")
).toDF("source","target")
我想添加另一个列nCommonAuthors,其中包含常见作者的数量。
我试过这样做:
def myUDF = udf { (s1: String, s2: String) =>
s1.split(",")
s2.split(",")
s1.intersect(s2).length
}
val newDF = myDF.withColumn("nCommonAuthors", myUDF($"source", $"target"))
我收到以下错误:
线程“main”中的异常java.lang.UnsupportedOperationException:不支持类型为Unit的模式
知道为什么我会收到此错误吗?如何在两列中找到共同元素?
根据SCouto的答案,我给你一个适合我的完整解决方案:
def myUDF: UserDefinedFunction = udf(
(s1: String, s2: String) => {
val splitted1 = s1.split(",")
val splitted2 = s2.split(",")
splitted1.intersect(splitted2).length
})
val spark = SparkSession.builder().master("local").getOrCreate()
import spark.implicits._
val df = Seq(("Author1,Author2,Author3","Author2,Author3,Author1")).toDF("source","target")
df.show(false)
source | target |
---|---|
Author1,Author2,Author3 | Author2,Author3,Author1 |
val newDF: DataFrame = df.withColumn("nCommonAuthors", myUDF('source,'target))
newDF.show(false)
source | target | nCommonAuthors |
---|---|---|
Author1,Author2,Author3 | Author2,Author3,Author1 | 3 |
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。