从 AWS Glue/PySpark 中的 100 个表中选择数据
Posted
技术标签:
【中文标题】从 AWS Glue/PySpark 中的 100 个表中选择数据【英文标题】:Selecting data from 100 tables in AWS Glue/PySpark 【发布时间】: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 个表中为给定用户选择行并得到总和?
谢谢。
【问题讨论】:
从所有这些表中创建一个view
(联合所有 user_1...100)并立即查询。语法-docs.databricks.com/spark/latest/spark-sql/language-manual/…
谢谢羽衣甘蓝。我将在 Redshift 中创建视图,因为我的数据源在 Redshift 中。
【参考方案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 中创建物化视图听起来是最有效的方法。干杯!以上是关于从 AWS Glue/PySpark 中的 100 个表中选择数据的主要内容,如果未能解决你的问题,请参考以下文章