【问题标题】:Selecting data from 100 tables in AWS Glue/PySpark从 AWS Glue/PySpark 中的 100 个表中选择数据
【发布时间】:2020-06-03 06:20:13
【问题描述】:

我在 AWS Glue 目录中有一个包含 100 个表的目录,格式为:

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 个表中为给定用户选择行并得到总和?

谢谢。

【问题讨论】:

标签: apache-spark pyspark apache-spark-sql aws-glue pyspark-dataframes


【解决方案1】:

您正在使用粘合目录,因此数据必须位于 s3 中。 因此,您可以在 s3 上创建所有表路径的列表并将它们作为一个 df 读取。这样您也可以应用下推条件。

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

Df.groupby('user_id').agg(sum(expense)).show()

【讨论】:

  • 谢谢。实际上数据来自 Redshift 表。是否可以对目录中的表名做类似的事情?
  • 您可以在 Redshift 中创建这 100 个表的视图。 Redshift 现在也支持物化视图,它会自动更新。然后使用 redshift 连接直接从该视图读取数据。
  • 谢谢耆那教。在 Redshift 中创建物化视图听起来是最有效的方法。干杯!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 2021-09-13
  • 2020-02-04
  • 2022-01-23
相关资源
最近更新 更多