Вопрос:

Объединить две таблицы на основе разных типов столбцов

sql scala dataframe join hive

29 просмотра

2 ответа

43 Репутация автора

У меня есть две таблицы со следующей схемой в качестве примера:

   scala> df1.printSchema
   root
    |-- id: string (nullable = true)

   AND

   scala> df2.printSchema
   root
    |-- col1: string (nullable = true)
    |-- col2: array (nullable = true)
    |    |-- element: string (containsNull = true)

Я хочу получить все col1 в df2, где элемент в массиве col2 равен id в df1. Выводится что-то вроде df3:

   scala> df3.printSchema
   root
    |-- c1: array (nullable = true)
    |    |-- element: string (containsNull = true)
    |-- c2: string (nullable = true)

где df3.c2 - это в основном df1.id, а df3.c1 - это массив всех df2.col1, которые удовлетворяют указанному равенству.

Любое решение SQL (куст) или Scala очень полезно.

Автор: user3520791 Источник Размещён: 11.08.2019 06:55

Ответы (2)


2 плюса

14395 Репутация автора

В улье:

select collect_set(df2.col1) as col1, df1.id as col2
 from df1
inner join 
(
select --explode col2 array 
      col1, s.c2 as col2 
 from df2 lateral view explode(col2) s as c2 
) df2 on df1.id = df2.col2
group by df1.id;
Автор: leftjoin Размещён: 11.08.2019 07:24

0 плюса

843535 Репутация автора

Я не думаю, что вам нужен подзапрос для этого:

select collect_set(df2.col1) as col1, df1.id as col2
from df2 lateral view
     explode(col2) s as c2 join
     df1
     on df1.id = s.c2
group by df1.id;
Автор: Gordon Linoff Размещён: 11.08.2019 11:45
Вопросы из категории :
32x32