Выбор данных из 100 таблиц в AWS Glue/PySpark

У меня есть каталог из 100 таблиц в каталоге AWS Glue формата:

user_1
user_2
...
user_100

Каждая таблица имеет такой формат:

| id | user_id | date     | expense |
|----|---------|----------|---------|
| 1  | 1       | 20200521 | 200     |
| 2  | 2       | 20200601 | 100     |
| 3  | 1       | 20200603 | 90      |

Каждая таблица имеет одинаковую схему, в которой один столбец является расходом (тип int). Строки каждого пользователя случайным образом вставляются в одну из этих 100 таблиц.

Что я хочу сделать, так это проверить сумму столбца расходов каждой из таблиц для данного пользователя.

Каков наиболее эффективный способ сделать это, а не создавать 100 динамических кадров и соединять их. Я предполагаю, что мне нужно создать 100 источников данных для каждой таблицы, но есть ли более простой способ выбрать строки для данного пользователя из всех 100 таблиц и получить сумму?

Спасибо.


person madu    schedule 03.06.2020    source источник
comment
создайте view из всех этих таблиц (объедините все user_1...100) и запросите сразу. синтаксис — docs.databricks.com/spark/ последняя версия/spark-sql/язык-руководство/   -  person Som    schedule 03.06.2020
comment
Спасибо Кале. Я сделаю представление в Redshift, так как мои источники данных находятся в Redshift.   -  person madu    schedule 03.06.2020


Ответы (1)


Вы используете клейкий каталог, поэтому данные должны лежать в s3. Таким образом, вы можете создать список всех путей к таблицам на s3 и прочитать их как один файл df. Таким образом, вы также можете применять условия pushdown.

Path = [path1, path2 .....path100]
Df = spark.read.csv(*path)

Df.groupby('user_id').agg(sum(expense)).show()
person Shubham Jain    schedule 03.06.2020
comment
Спасибо. На самом деле данные поступают из таблиц Redshift. Можно ли сделать что-то подобное с именами таблиц в каталоге? - person madu; 03.06.2020
comment
Вы можете создать представление в красном смещении для этих 100 таблиц. Redshift теперь также поддерживает материализованные представления, которые будут обновляться автоматически. Затем, используя соединение с красным смещением, напрямую считывайте данные из этого представления. - person Shubham Jain; 03.06.2020
comment
Спасибо, Джейн. Создание материализованного представления в Redshift звучит как самый эффективный способ сделать это. Ваше здоровье! - person madu; 03.06.2020