AWS Glue 作业流程
AWS Glue Job Flow
我在 Glue 中有一个 ETL 作业,它处理一个非常大的(300M 行)JDBC 数据库 table,但我真的只需要这个 table 的一个子集(某些 ID) ].当我执行 glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")
时,是否会在此命令中加载整个 table?有没有办法编写自定义查询以仅加载我需要的数据?或者,如果我在 DataFrame 上使用另一个命令说 Filter
或 spark SQL 命令,该命令会在拉取数据时进行过滤吗?
嗯,当你 运行:
glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")
它只创建一个 Spark DF 引用。
Spark 可处理转换(即过滤器、映射、select)和操作(即收集、计数、显示)。您可以在此处阅读更多相关信息 How Apache Spark’s Transformations And Action works,但基本上,您的数据库 table 只会在调用 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()
这将保证您只将特定的列和行加载到内存
我在 Glue 中有一个 ETL 作业,它处理一个非常大的(300M 行)JDBC 数据库 table,但我真的只需要这个 table 的一个子集(某些 ID) ].当我执行 glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")
时,是否会在此命令中加载整个 table?有没有办法编写自定义查询以仅加载我需要的数据?或者,如果我在 DataFrame 上使用另一个命令说 Filter
或 spark SQL 命令,该命令会在拉取数据时进行过滤吗?
嗯,当你 运行:
glueContext.create_dynamic_frame.from_catalog(database="legislators", table_name="persons")
它只创建一个 Spark DF 引用。
Spark 可处理转换(即过滤器、映射、select)和操作(即收集、计数、显示)。您可以在此处阅读更多相关信息 How Apache Spark’s Transformations And Action works,但基本上,您的数据库 table 只会在调用 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()
这将保证您只将特定的列和行加载到内存