Альтернатива использования запроса на выборку в случае, когда оператор в spark sql - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь выполнить запрос с select в case when операторе. как то так:

select case when cust_id in (select cust_id from tab_cust) then 'Eligible' else 'Not Eligible' end as Eligibility
from tab_product;

, но выполнение этого запроса в spark sql выдает ошибку:

Таблица или представление не найдены: tab_cust

Но если я использую тот же запрос на выборку, что и подзапрос, где ошибка не выдается, но это исключит набор записей, которые мне не нужны.

Есть ли способ выполнить этот запрос без использования оператора select в случае, когда получить тот же результат?

1 Ответ

0 голосов
/ 17 сентября 2018

Похоже, вы хотите проверить, находится ли значение в одной таблице в другой таблице.Правда?Я использую СОЕДИНЕНИЯ для этого.Вот пример pyspark.

from pyspark.sql.types import *

custSchema = StructType([
  StructField("cust_id", IntegerType())
])

productDF = spark.createDataFrame([(1,),
                                   (2,),
                                   (3,)
                                  ], schema=custSchema)

productDF.createOrReplaceTempView("tab_product")

customerDF = spark.createDataFrame([(2,),
                                    (3,),
                                    (4,)
                                  ], schema=custSchema)

customerDF.createOrReplaceTempView("tab_cust")

spark.sql("""
  SELECT tab_product.cust_id, nvl2(tab_cust.cust_id, 'Eligible', 'Not Eligible') as Eligibility
  FROM tab_product LEFT OUTER JOIN tab_cust
   ON tab_product.cust_id = tab_cust.cust_id
  """).show()

дает:

+-------+------------+
|cust_id| Eligibility|
+-------+------------+
|      1|Not Eligible|
|      3|    Eligible|
|      2|    Eligible|
+-------+------------+
...