Присоединяйтесь 1 = 1 на pyspark - PullRequest
0 голосов
/ 26 мая 2020

Добрый день,

Я sh, чтобы проверить, существует ли моя переменная в любой из двух таблиц, и получить результат в одной таблице для дальнейшей обработки. Я решил, что это просто:

'''
   select concent, concent_big  from 
     (select count(*) as concent where core_id = "{}" ) as a
   left join 
     (select count(*) as concent_big ,concent_2 where core_id = "{}" ) as b
   on 1 = 1
'''

Однако это, похоже, недопустимо. Это немного сбивает с толку, так как я делал аналогичные вещи в Sql ранее. Теперь pySpark доставляет мне неприятности. Я придумал обходной путь, но это (imho) глупо:

 '''
    select concent, concent_big  from 
      (select count(*) as concent, 1 as tmp_key from concent where core_id = "{}" ) as a
    left join 
      (select count(*) as concent_big , 1 as tmp_key from concent_2 where core_id = "{}" ) as b
    on a.tmp_key = b.tmp_key
 '''

Есть идеи, как сделать это более элегантно?

1 Ответ

1 голос
/ 26 мая 2020

Почему бы просто не использовать crossJoin? Предупреждение - в результате получается полное декартово произведение, поэтому ваша таблица может увеличиться в размерах, но в вашем случае это, похоже, желаемый эффект. Вы можете прочитать об этом здесь: https://spark.apache.org/docs/2.4.3/api/python/pyspark.sql.html#pyspark. sql .DataFrame.crossJoin

РЕДАКТИРОВАТЬ: при использовании Spark SQL язык соответствует ANSI SQL стандарты, поэтому команда становится CROSS JOIN.

Надеюсь, это поможет.

...