Операции Spark SQL в нескольких случаях - PullRequest
0 голосов
/ 31 октября 2019

Я хотел бы выполнить вычисление с одним запросом для нескольких случаев, когда в Spark SQL:

Мой запрос будет выглядеть следующим образом

Select id, 1/(1+exp(-(
 CASE  when col1 is null then -0.215244020213 when col1 <= 23.11 then 0.7705802481794184 else 4.199835974425061 END +
 CASE  when col2 is null then -0.0525954923787 when col2 <= 0E-8 then 0.32648553836619026  else 0.32648553836619026 END 
 -16.706158802731316) as target from mytable limit 10

Ошибка

AnalysisException: Syntax error in line 684:undefined: ... END -16.706158802731316) as target 
 ^ Encountered: AS Expected: AND, BETWEEN, DIV, I

Запрос будет работать, если я разделю его на табличное выражение. Однако для требования о добавлении столбца в исходную таблицу я хотел перейти на единый расчет на месте. Используя значение табличного выражения, каждый имеет результат в 2 столбца id, target и должен присоединиться к исходной таблице, которая стоит дорого для таблицы из сотен миллионов строк

with table_exp as
(select 
CASE  when col1 is null then -0.215244020213 when col1 <= 23.11 then 0.7705802481794184 else 4.199835974425061 end as col1_calc,
CASE  when col2 is null then -0.0525954923787 when col2 <= 0E-8 then 0.32648553836619026  else 0.32648553836619026 END  as col2_calc
from  mytable)
select id, 1/(1+exp(-(col1_calc+col2_calc)-16.706158802731316) as target from table_exp

Udpate: Я понял это. Это не имеет ничего общего с ограничением, только то, что я напутал с круглыми скобками

...