Отфильтруйте один столбец, не сопоставляя его с другим столбцом

#sql #scala #apache-spark

Вопрос:

Как я могу создать фрейм данных, содержащий записи table1 таблицы, которые НЕ соответствуют istituto, service_rap, filiale_rap, codice_rap полям таблицы table2

Я пробовал что-то вроде этого (но это не работает):

 val result: Dataset[Row] = table1.where($"istituto".notEqual(table2("istituto"))) val result: Dataset[Row] = table1.where($"istituto" =!= (table2("istituto")))  

Ошибка:

 Exception in thread "main" org.apache.spark.sql.AnalysisException: Resolved attribute(s) istituto#16 missing from istituto#42,servizio_rap#43,filiale_rap#44,codice_rap#45,ndg#46 in operator !Filter NOT (istituto#42 = istituto#16). Attribute(s) with the same name appear in the operation: istituto. Please check if the right attribute(s) are used.; !Filter NOT (istituto#42 = istituto#16)  

таблица 1:

 private val table1: DataFrame = Seq(  ("03104", "001", "00002", "123456", "ndg1"),  ("03104", "001", "00002", "123455", "ndg2")  ).toDF("istituto", "servizio_rap", "filiale_rap", "codice_rap", "ndg")  

таблица 2:

 private val secondInput: DataFrame = Seq(  ("03106", "001", "00002", "123456", "ndg1"))  .toDF("istituto", "servizio_rap", "filiale_rap", "codice_rap", "ndg")  

Ожидаемый результат:

  -------- ------------ ----------- ---------- ----  |istituto|servizio_rap|filiale_rap|codice_rap|ndg |  -------- ------------ ----------- ---------- ----  |03106 |002 |00003 |123465 |ndg1|  -------- ------------ ----------- ---------- ----   

Комментарии:

1. Все в таблицах 1 и 2 представляет собой строку

2. то istituto же самое для обеих строк в таблице 1, это опечатка ? Кроме того, результат servizio_rap и filiale_rap отличается от значений, приведенных в таблицах

3. В таблице 1 то же самое, это не опечатка. servizio_rap и filiale_rap это всего лишь примеры данных для визуализации моей проблемы.

4. Решено с помощью соединения «leftanti» val result: DataFrame = secondInput.join(input,Seq("servizio_rap","filiale_rap","codice_rap","istituto"),"leftanti")

5. @IsmailH Я не могу ответить на вопрос. не могли бы вы, пожалуйста, опубликовать этот ответ?

Ответ №1:

Из комментария, сделанного @Miko :

Решено с помощью leftanti соединения

 val result: DataFrame = secondInput.join(input,Seq("servizio_rap","filiale_rap","codice_rap","istituto"),"leftanti")   

Комментарии:

1. Большое спасибо!