#scala #apache-spark
#scala #apache-spark
Вопрос:
У меня есть фрейм данных df со столбцами «источник, цель, вес», и мне нужно использовать команду scala (без SQL), чтобы:
- Получить все веса выше 10 и
- удалите все повторяющиеся строки.
Для 1 я попробовал df.filter(«weight>= 10»), но это не работает
Для 2 я попробовал df.dropDuplicates(), но это тоже не работает
Я использую это в качестве ссылки для приведенных выше команд.
Что я здесь делаю не так?
Комментарии:
1. Что вы подразумеваете под «это не работает»?
Ответ №1:
вы используете filter
неправильный способ, посмотрите на приведенный ниже фрагмент, чтобы понять
import sparkSession.implicits._
val dataframe = Seq(("x", 20, 10), ("y", 30, 20), ("y", 30, 20), ("z", 10, 20)).toDF("source", "target", "weight")
val result1 = dataframe.filter($"weight" > 10)
val result2 = dataframe.filter($"weight" > 10).dropDuplicates()
dataframe.show
result1.show
result2.show
и на выходе получается
------ ------ ------
|source|target|weight|
------ ------ ------
| x| 20| 10|
| y| 30| 20|
| y| 30| 20|
| z| 10| 20|
------ ------ ------
------ ------ ------
|source|target|weight|
------ ------ ------
| y| 30| 20|
| y| 30| 20|
| z| 10| 20|
------ ------ ------
------ ------ ------
|source|target|weight|
------ ------ ------
| y| 30| 20|
| z| 10| 20|
------ ------ ------
Комментарии:
1. С
.filter("weight>=10")
2. Но как мне заставить его переформатировать исходный df? Должен ли я выполнять dataframe=dataframe.filter($»weight» > 10).show?