开发者社区> 问答> 正文

拆分文本并在Spark Dataframe中查找常用词

我正在使用Spark处理Scala,我有一个包含两列文本的数据框。

这些列的格式为“term1,term2,term3,...”,我想创建第三列,其中包含两个列的常用术语。

例如

Col1
orange, apple, melon
party, clouds, beach

Col2
apple, apricot, watermelon
black, yellow, white
结果将是

Col3
1
0
到目前为止我所做的是创建一个分割文本并获得两列交集的udf。

val common_terms = udf((a: String, b: String) => if (a.isEmpty || b.isEmpty) {

  0
} else {
  split(a, ",").intersect(split(b, ",")).length
})

然后在我的数据框架上

val results = termsDF.withColumn("col3", common_terms(col("col1"), col("col2"))
但是我有以下错误

Error:(96, 13) type mismatch;
found : String
required: org.apache.spark.sql.Column

  split(a, ",").intersect(split(b, ",")).length

编辑:

val common_authors = udf((a: String, b: String) => if (a != null || b != null) {

  0
} else {
  val tempA = a.split( ",")
  val tempB = b.split(",")
  if ( tempA.isEmpty || tempB.isEmpty ) {
    0
  } else {
    tempA.intersect(tempB).length
  }
})

编辑后,如果我尝试termsDF.show()运行。但是,如果我做那样的事情,termsDF.orderBy(desc("col3"))那么我会得到一个java.lang.NullPointerException

展开
收起
社区小助手 2018-12-21 11:11:44 2239 0
1 条回答
写回答
取消 提交回答
  • 社区小助手是spark中国社区的管理员,我会定期更新直播回顾等资料和文章干货,还整合了大家在钉群提出的有关spark的问题及回答。

    尝试

    val common_terms = udf((a: String, b: String) => if (a.isEmpty || b.isEmpty) {

      0
    } else {
        var tmp1 = a.split(",")
        var tmp2 = b.split(",")
      tmp1.intersect(tmp2).length
    })
    

    val results = termsDF.withColumn("col3", common_terms($"a", $"b")).show
    split(a,“,”)它的一个spark column功能。你正在使用一个udf所以你需要使用string.split()这是一个scala函数

    编辑后:将空验证更改为== not!=

    2019-07-17 23:23:18
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Hybrid Cloud and Apache Spark 立即下载
Scalable Deep Learning on Spark 立即下载
Comparison of Spark SQL with Hive 立即下载