Я работаю с Spark.SQL и пытаюсь создать сводную таблицу с помощью оператора MAP, чтобы значения одного столбца были разными столбцами.
Я подготовил первую таблицу с этимquery:
spark.sql("""CREATE TABLE TABLE_01 STORED AS PARQUET AS
select
ROWS,
COLUMNS,
count(*) as NUM_ROWS
from TABLE_00
group by ROWS, COLUMNS
order by ROWS, COLUMNS
""")
Идея заключается в преобразовании этого:
ROWS COLUMNS NUM_ROWS
VALUE1 COL2 2
VALUE1 COL3 50
VALUE2 COL1 20
VALUE2 COL2 1
VALUE2 COL3 30
В это:
COLUMNS
COL1 | COL2 | COL3
ROWS
------------------------------------------------------
VALUE1 0 (The problem) | 2 | 50
VALUE2 20 | 1 | 30
У меня был запрос в Python2, который работал, ноТеперь я должен перейти на Python3, и я схожу с ума.Запрос:
spark.sql("""CREATE TABLE TABLE_02 STORED AS PARQUET AS
select
a.ROWS,
coalesce(sum(a.group_map['COL1']),0) as COL1,
coalesce(sum(a.group_map['COL2']),0) as COL2,
coalesce(sum(a.group_map['COL3']),0) as COL3
from
(
select ROWS, map(COLUMNS,NUM_ROWS) as group_map
from TABLE_01
) a
group by a.ROWS
""")
Вывод: java.lang.RuntimeException: Нельзя использовать ноль в качестве ключа карты!
Любая помощь?Почему это работает с Python2?
Спасибо!