从 AWS 中的 100 个表中选择数据 Glue/PySpark
Selecting data from 100 tables in AWS Glue/PySpark
我在 AWS Glue 目录中有一个 100 table 的目录,格式为:
user_1
user_2
...
user_100
每个 table 都有这样的格式:
| id | user_id | date | expense |
|----|---------|----------|---------|
| 1 | 1 | 20200521 | 200 |
| 2 | 2 | 20200601 | 100 |
| 3 | 1 | 20200603 | 90 |
每个 table 都有相同的模式,其中一列是费用(int 类型)。
每个用户的行都会随机插入到这 100 table 行中。
我想要做的是检查给定用户的每个 table 的费用列的总和。
除了创建 100 个动态帧并加入它们之外,执行此操作的最有效方法是什么。我想我需要为每个 table 创建 100 个数据源,但是有没有更简单的方法来 select 来自所有 100 个 table 的给定用户的行并获得总和?
谢谢。
你使用的是glue catalog,所以数据一定在s3。
因此,您可以创建 s3 上所有表路径的列表,并将它们作为一个 df 读取。这样您也可以应用下推条件。
Path = [path1, path2 .....path100]
Df = spark.read.csv(*path)
Df.groupby('user_id').agg(sum(expense)).show()
我在 AWS Glue 目录中有一个 100 table 的目录,格式为:
user_1
user_2
...
user_100
每个 table 都有这样的格式:
| id | user_id | date | expense |
|----|---------|----------|---------|
| 1 | 1 | 20200521 | 200 |
| 2 | 2 | 20200601 | 100 |
| 3 | 1 | 20200603 | 90 |
每个 table 都有相同的模式,其中一列是费用(int 类型)。 每个用户的行都会随机插入到这 100 table 行中。
我想要做的是检查给定用户的每个 table 的费用列的总和。
除了创建 100 个动态帧并加入它们之外,执行此操作的最有效方法是什么。我想我需要为每个 table 创建 100 个数据源,但是有没有更简单的方法来 select 来自所有 100 个 table 的给定用户的行并获得总和?
谢谢。
你使用的是glue catalog,所以数据一定在s3。 因此,您可以创建 s3 上所有表路径的列表,并将它们作为一个 df 读取。这样您也可以应用下推条件。
Path = [path1, path2 .....path100]
Df = spark.read.csv(*path)
Df.groupby('user_id').agg(sum(expense)).show()