Я пытаюсь отфильтровать записи из фрейма данных, которые не равны (! =) Значениям из нескольких столбцов.Я могу заставить его работать, но не могу понять, как работает фильтр ..
Постановка проблемы
- Кадр данных со столбцом идентификатора и значения
- Фильтровать записикоторый не имеет id = 1 и value = 'Value1'
Я могу решить эту проблему, используя следующий код
val conf = new SparkConf().setAppName("Test").setMaster("local[4]")
val spark = org.apache.spark.sql.SparkSession.builder().config(conf).getOrCreate()
import spark.implicits._
val df = Seq((1, "Value1"),(2, "Value2"), (3, "Value3"), (4, "Value1"), (5, "Value2"), (6, "Value3")).toDF("id", "value")
df.filter("(id != 1 or value != 'Value1')").show
Вывод с "ИЛИ":
+---+------+
| id| value|
+---+------+
| 2|Value2|
| 3|Value3|
| 4|Value1|
| 5|Value2|
| 6|Value3|
+---+------+
Вывод с «И»:
Удаляется другая запись с id = 4 и значением = Значение1. По сути, это удаление всех записей со значением! = Значение1.
+---+------+
| id| value|
+---+------+
| 2|Value2|
| 3|Value3|
| 5|Value2|
| 6|Value3|
+---+------+
Вопрос:
Первоначально я пытался с условием "И" внутри фильтра, например "df.filter("(id != 1 and value != 'Value1')").show"
, но оно не работало
Насколько я понимаю, это комбинация двухусловие (id not equal 1 and value not equal Value1)
и, следовательно, оно должно быть AND
, но, как ни странно, оно работает с условием OR
внутри фильтра.
Может кто-нибудь объяснить это поведение и как его следует интерпретировать.Sry, если это вопрос синтаксиса SQL