开发者社区> 问答> 正文

如何在两个数组列中查找公共元素?

社区小助手 2018-12-21 13:49:59 463

我有两个以逗号分隔的字符串列(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的模式

知道为什么我会收到此错误吗?如何在两列中找到共同元素?

分享到
取消 提交回答
全部回答(2)
  • 1565966273186108
    2019-07-17 23:23:25

    gson的包中有工具类可以实现,无需自主编码

    0 0
  • 社区小助手
    2019-07-17 23:23:25

    根据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
    0 0
添加回答
+ 订阅

时时分享云计算技术内容,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。

推荐文章