AWS Glue作业流程

时间:2019-07-09 22:41:50

标签: python amazon-web-services apache-spark pyspark aws-glue

我在Glue中有一个ETL作业,可以处理一个很大的(300M行)JDBC数据库表,但是我实际上只需要该表的一个子集(某些ID)。当我做glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")时,是否以此命令加载整个表?有没有办法编写自定义查询以仅加载我需要的数据?或者,如果我在其后跟随另一个命令,例如Filter或DataFrame上的spark SQL命令,将在提取数据时进行过滤吗?

1 个答案:

答案 0 :(得分:1)

好吧,当您运行:

glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")

它仅创建一个Spark DF参考。

Spark可用于转换(即过滤,映射,选择)和动作(即收集,计数,显示)。您可以在How Apache Spark’s Transformations And Action works处了解更多信息,但是基本上,只有在调用action时,数据库表才会加载到内存中。这是Spark如此强大并建议与任何大小的数据集一起使用的众多原因之一。

PDF显示了所有可用的转换和操作以及使用它们的一些示例。

是的,您需要先执行以下步骤:

df = glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")
df = df.filter(YOUR_FILTER).select(SPECIFIC_COLS)

# Calling an action to show the filtered DF
df.show()

这将确保您仅将特定的列和行加载到内存中

相关问题