如何修复 AWS Glue 代码以显示来自 AWS S3 的分区表的计数和架构
Posted
技术标签:
【中文标题】如何修复 AWS Glue 代码以显示来自 AWS S3 的分区表的计数和架构【英文标题】:How to fix AWS Glue code in displaying count and schema of partitioned table from AWS S3 【发布时间】:2019-06-28 10:12:53 【问题描述】:我正在尝试计算记录并打印我的分区表的架构(以镶木地板的形式)。我只是在 AWS Glue 控制台中执行此操作(因为我无权连接到开发人员端点)。但是,我认为我的查询不会产生任何结果。请参阅下面的代码。有什么建议吗?
%pyspark
from awsglue.context import GlueContext
from awsglue.transforms import *
from pyspark.context import SparkContext
glueContext = GlueContext(SparkContext.getOrCreate())
datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "s3", table_name = "subscriber", push_down_predicate = "(date=='2018-12-06')", transformation_ctx = "datasource0")
df = datasource0.toDF()
print df.count()
df.printSchema()
【问题讨论】:
【参考方案1】:我不确定在 Glue 中使用 print
... 我建议使用日志记录来打印结果。您可以获取记录器对象并像这样使用它:
spark = glueContext.spark_session
log4jLogger = spark.sparkContext._jvm.org.apache.log4j
logger = log4jLogger.LogManager.getLogger(__name__)
logger.info(df.count())
然后,您可以从作业控制台访问特定作业执行的日志。例如,在那里您应该能够看到您的 DF 计数。
您可以在下图中看到带有生成结果的示例代码:
【讨论】:
嗨 Vzzarr。我可以在不做任何 ETL 的情况下运行这项工作吗?计划使用控制台只计算分区(和过滤)表的记录,而不是进行任何传输到另一个表(以减少运行时间)。 @tn.splinter 是的,您应该能够在不执行 ETL 的情况下在 Glue 中运行作业(当然读取数据除外,否则您将无法进行任何计数;)) .然后我建议使用带有“无过滤器”docs.aws.amazon.com/glue/latest/dg/… 的“连续日志记录”,以改善用户的日志记录(在本例中为您的日志记录)并获得更多日志记录消息,这将有助于您可视化您的日志记录消息 嗨@Vzzarr 试过这个但仍然没有结果。日志仅显示信息和警告。仍然找不到行数。这是我的查询:sc = SparkContext()glueContext = GlueContext(sc) spark =glueContext.spark_session log4jLogger = spark.sparkContext._jvm.org.apache.log4j logger = log4jLogger.LogManager.getLogger(name ) datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "s3", table_name = "subscriber", push_down_predicate = "(date=='2018-12-06')", transformation_ctx = "datasource0") df = datasource0.toDF( ) logger.info(df.count()) 日志:2019 年 7 月 2 日上午 10:41:05 19/07/02 02:41:05 警告实用程序:spark.executor.instances 小于 spark.dynamicAllocation.minExecutors 无效,忽略它的设置,请更新您的配置。 2019 年 7 月 2 日上午 10:41:05 19/07/02 02:41:05 INFO ApplicationMaster:开始进度报告线程 2019 年 7 月 2 日上午 10:41:13 19/07/02 02:41:13 INFO GlueContext:未配置 GlueMetrics 2019 年 7 月 2 日上午 10:50:25 19/07/02 02:50:25 WARN ServletHandler:/api/v1/applications 2019 年 7 月 2 日,上午 10:52:09 19/07/ 02 02:52:09 INFO ApplicationMaster:最终应用状态:成功,退出代码:0 @tn.splinter 我试图重现所描述的代码并用成功计数的图片更新了答案。让我知道这是否有帮助以上是关于如何修复 AWS Glue 代码以显示来自 AWS S3 的分区表的计数和架构的主要内容,如果未能解决你的问题,请参考以下文章
aws glue / pyspark - 如何使用 Glue 以编程方式创建 Athena 表
如何在 AWS Glue 中从 CSV 创建结构化 JSON