Я столкнулся с проблемой при выполнении относительно большого запроса в Spark (режим кластера) на кластере Cloudera.
Это часть запроса:
...
CASE WHEN (gender_code = 'M') THEN 1 ELSE 0 END `2114`,
CASE WHEN (gender_code IS NOT NULL AND LENGTH(TRIM(gender_code)) > 0) THEN
1 ELSE 0 END `1780`,
CASE WHEN (( gender_code = 'F'
) AND ( procedure_code between '54000' and '55920' )
) THEN 1 ELSE 0 END `4054`,
CASE WHEN (NVL(gender_code, 'U') = 'U') THEN 1 ELSE 0 END `92501`,
CASE WHEN ((getConstant("FILE_TYPE_CODE") = 'PC' AND gender_code in ('1', 'M')) OR (getConstant("FILE_TYPE_CODE") IN ('ME', 'MC', 'PC') AND gender_code = 'M')) THEN 1 ELSE 0 END `2125`,
CASE WHEN (date_of_birth is NULL) THEN 1 ELSE 0 END `92971`,
/*THIS ONE IS CAUSING ISSUE */( select first(number_of_member_first_name) from( select count (distinct x.member_first_name) as number_of_member_first_name, date_format(x.paid_date,'yyyyMM') as ym from dataset x where cast( datediff(x.date_of_service_from,x.date_of_birth)/365 as INTEGER ) > 60 group by date_format(x.paid_date,'yyyyMM') ) s where s.ym= date_format(a.paid_date,'yyyyMM') ) `93251`,
CASE WHEN (date_of_birth is not null AND LENGTH(TRIM(date_of_birth)) > 0) THEN 1 ELSE 0 END `92504`,
CASE WHEN (member_city IS NOT NULL AND LENGTH(TRIM(member_city)) > 0) THEN 1 ELSE 0 END `1638`,
CASE WHEN (member_city is NULL) THEN 1 ELSE 0 END `92961`,
CASE WHEN (member_state is NULL) THEN 1 ELSE 0 END `92621`,
CASE WHEN (member_state = getConstant("CLIENT_CODE")
) THEN 1 ELSE 0 END `2260`,
CASE WHEN (member_state IS NOT NULL AND LENGTH(TRIM(member_state)) > 0) THEN 1 ELSE 0 END `1961`,
CASE WHEN (member_zip_code IS NOT NULL AND LENGTH(TRIM(member_zip_code)) > 0) THEN 1 ELSE 0 END `1793`,
CASE WHEN (member_zip_code is NULL) THEN 1 ELSE 0 END `92622`,
CASE WHEN (( date_of_service_from > paid_date ) AND ( date_of_service_from is NOT NULL )
...
Этот огромный запрос имеет много скалярных подзапросов в своей части выбора. Часть, которую я упомянул с помощью «/ * ЭТО ОДНА ПРИЧИНА ПРОБЛЕМА * /», работает отлично, когда я тестирую код на своем локальном компьютере (нажмите на ссылку, чтобы увидеть снимок экрана):
захват экрана
но когда тот же запрос к тем же файлам выполняется в кластере Cloudera, он получает следующую ошибку:
java.lang.RuntimeException: Unexpected operator in scalar subquery: LocalRelation <empty>, [first(number_of_member_first_name, false)#405275L, ym#404801]
at scala.sys.package$.error(package.scala:27)
at org.apache.spark.sql.catalyst.optimizer.RewriteCorrelatedScalarSubquery$.evalPlan$1(subquery.scala:373)
Кто-нибудь может помочь мне понять, почему он работает нормально на моей локальной машине, но получает ошибку в Cloudera Cluster?