Как исправить ошибку «Нельзя использовать ноль в качестве ключа карты!»ошибка в Spark.SQL с Python 3 при использовании Group_Map - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю с 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?

Спасибо!

1 Ответ

0 голосов
/ 12 февраля 2019

Вы пытаетесь определить отсутствующее значение, в данном случае VALUE1, COL1.Пустое значение не является правильным способом возврата значения Null, вам нужно определить его как None.Итак, что вы должны сделать, это определить VALUE1, COL1 как None.

...