【问题标题】:Spark Scala : Fetch distinct text values within each cellSpark Scala:在每个单元格中获取不同的文本值
【发布时间】:2021-11-11 08:15:37
【问题描述】:

我是 scala 的新手,我在从一行的每个单元格中获取不同的文本值时遇到了麻烦。我的数据框如下所示。我的目的是消除每个候选人 ID 的重复技能。

candidate_id skills join_date location
1789s3 java; c++ ; java 2012-09-22 Mumbai
agduch23 ppt ; ppt ; miner 2018-02-02 Banglore
sgdtev office 365; 2019-03-10 Noida

我的最终结果数据框应该看起来像这样 -

candidate_id skills join_date location
1789s3 java; c++ 2012-09-22 Mumbai
agduch23 ppt; miner 2018-02-02 Banglore
sgdtev office 365; 2019-03-10 Noida

我在 SQL 中使用以下命令来执行此操作。

string_agg(ARRAY_TO_STRING(ARRAY((select distinct skill from unnest(split(skills_agg, '; ')) as skill)), '; ')) as skills_distinct

有没有一种方法可以在不使用 sql 的情况下在 scala 中做到这一点。

提前致谢

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    如果您使用的是 Spark 3.0 及更高版本,您可以通过使用 split 将字符串拆分为数组来删除重复项,然后使用函数 array_distinct 删除重复项,最后使用 concat_ws 重建字符串,如下所示:

    import org.apache.spark.sql.functions.{array_distinct, col, concat_ws, split}
    
    dataframe.withColumn("skills", concat_ws("; ", array_distinct(split(col("skills"), "; ")))
    

    您可以在Scala API functions' Scaladoc中找到所有可以使用的功能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多