SQL-запрос Spark с ошибкой совпадения типов данных - PullRequest
0 голосов
/ 04 февраля 2019

У меня небольшой SQL-запрос, который прекрасно работает в SQL, но тот же запрос работает в кусте, как и ожидалось.Таблица содержит информацию о пользователе, и ниже приведен запрос

spark.sql("select * from users where (id,id_proof) not in ((1232,345))").show;

Я получаю исключение ниже в искре

org.apache.spark.sql.AnalysisException: cannot resolve '(named_struct('age', deleted_inventory.`age`, 'id_proof', deleted_inventory.`id_proof`) IN (named_struct('col1',1232, 'col2', 345)))' due to data type mismatch: Arguments must be same type but were: StructType(StructField(id,IntegerType,true), StructField(id_proof,IntegerType,true)) != StructType(StructField(col1,IntegerType,false), StructField(col2,IntegerType,false));

I id и id_proof имеют целочисленные типы.

1 Ответ

0 голосов
/ 04 февраля 2019

Попробуйте использовать таблицу with (), она работает.

scala> val df = Seq((101,121), (1232,345),(222,2242)).toDF("id","id_proof")
df: org.apache.spark.sql.DataFrame = [id: int, id_proof: int]

scala> df.show(false)
+----+--------+
|id  |id_proof|
+----+--------+
|101 |121     |
|1232|345     |
|222 |2242    |
+----+--------+


scala> df.createOrReplaceTempView("girish")

scala> spark.sql("with t1( select 1232 id,345 id_proof ) select id, id_proof from girish where (id,id_proof) not in (select id,id_proof from t1) ").show(false)
+---+--------+
|id |id_proof|
+---+--------+
|101|121     |
|222|2242    |
+---+--------+


scala>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...