mayton2019
@mayton2019
Bigdata Engineer

Как развернуть колонку набок и в массив (Databricks/Spark)?

Добрый день. Используем Databricks на Azure.

Допустим дана табличка наподобие учебной emp.
empno    ename    job    mgr    hiredate    sal    comm    depno
7782    CLARK    MANAGER    7839    1981-06-09    2450    NULL    10
7839    KING    PRESIDENT    NULL    1981-11-17    5000    NULL    10
7934    MILLER    CLERK    7782    1982-01-23    1300    NULL    10
7369    SMITH    CLERK    7902    1980-12-17    800    NULL    20
7566    JONES    MANAGER    7839    1981-04-02    2975    NULL    20
7788    SCOTT    ANALYST    7566    1987-04-19    3000    NULL    20


Мне из нее нужно средствами SQL сделать нечто вроде.
create table DEPTS_COLLECTION(
  id int,
  enames ARRAY<string>
) using parquet;

insert into DEPTS_COLLECTION values(10, ARRAY('CLARK','KING','MILLER'));
insert into DEPTS_COLLECTION values(20, ARRAY('SMITH','JONES','SCOTT'));

Тоесть группируем имена сотрудников по цеху но записываем в массив.

Реальные имена таблиц не могу приводить. NDA. Но суть-таже.
  • Вопрос задан
  • 124 просмотра
Пригласить эксперта
Ответы на вопрос 1
mayton2019
@mayton2019 Автор вопроса
Bigdata Engineer
Сам себе отвечаю.

collect_list() и explode()

- две функции которые делают нужные преобразования.

Но практически - моя постановка изменилась и сейчас сводится к работе с JSON-arrays которые лежат
в ячейках таблицы. Для них collect/explode мне не подошел. А подошли функции transform и cast.
Часть из них доступны начиная со Spark 3.1.1 и Databricks 9.1.x-LTS Runtime. Поэтому надо модернизироваться срочно.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы