scala #apache-spark #apache-spark-sql
#scala #apache-spark #apache-spark-sql
Вопрос:
Я новичок в scala, и у меня возникли проблемы с извлечением различных текстовых значений из каждой ячейки строки. Мой фрейм данных выглядит примерно так, как показано ниже. Я намерен устранить дублирующие навыки для каждого идентификатора кандидата.
candidate_id | навыки | join_date | Расположение |
---|---|---|---|
1789s3 | java; c ; java | 2012-09-22 | Мумбаи |
agduch23 | ppt; ppt; майнер | 2018-02-02 | Banglore |
sgdtev | office 365; | 2019-03-10 | Noida |
Мой конечный результирующий фрейм данных должен выглядеть примерно так —
candidate_id | навыки | join_date | Расположение |
---|---|---|---|
1789s3 | java; c | 2012-09-22 | Мумбаи |
agduch23 | ppt; майнер | 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
Есть ли способ, которым я могу сделать это в scala без использования 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"), "; ")))
Вы можете найти все функции, которые вы можете использовать в Scaladoc функций Scala API