Как мне отфильтровать фрейм данных, чтобы отображались только определенные значения?

#scala #apache-spark

#scala #apache-spark

Вопрос:

У меня есть фрейм данных df со столбцами «источник, цель, вес», и мне нужно использовать команду scala (без SQL), чтобы:

  1. Получить все веса выше 10 и
  2. удалите все повторяющиеся строки.

Для 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?