Python 最好的阅读方式是在一张大桌子的一部分涂上胶水
我从我的数据湖(目前存储在postgres中)加载一个大文件到AWS GLUE时遇到了一些问题。这是43亿行 在测试中,我发现表太大,无法完全读取 下面是我加载数据帧的方式:Python 最好的阅读方式是在一张大桌子的一部分涂上胶水,python,amazon-web-services,apache-spark,pyspark,aws-glue,Python,Amazon Web Services,Apache Spark,Pyspark,Aws Glue,我从我的数据湖(目前存储在postgres中)加载一个大文件到AWS GLUE时遇到了一些问题。这是43亿行 在测试中,我发现表太大,无法完全读取 下面是我加载数据帧的方式: large_dynamic_frame = glueContext.create_dynamic_frame.from_catalog(database = "DBNAME", table_name = "TABLENAME",
large_dynamic_frame = glueContext.create_dynamic_frame.from_catalog(database = "DBNAME",
table_name = "TABLENAME",
redshift_tmp_dir = args["TempDir"],
transformation_ctx = "TABLECTX")
重要因素
- 我不需要整个数据帧!我最终将基于几个属性进行过滤,并使用较小的表进行连接
- 我已经尝试过使用
,但这需要使用特定的文件夹组织将数据存储在S3中,不幸的是,我无法选择此表的预先存在的格式下推谓词
- 我还尝试读取表中的内容,并简单地将其重新组织到S3文件夹组织中,这是
工作所必需的,但运行5小时后,该过程以“退出代码1”结束pushdown\u predicate
如何在不使用
下推谓词的情况下读取表的一部分 不幸的是,谓词下推只适用于S3,正如您已经发现的那样
关于“退出代码1”,S3中的数据是否为原始CSV格式?您可以尝试创建多部件bzip2或lz4吗。在这种情况下,负载将由多个工作人员共享李>
您为任务分配了多少DPU。这为DPU容量规划提供了一个很好的概述
或者您可以在Postgres中创建一个视图并将其用作源
如果有帮助,请告诉我。您也可以在Glue中使用纯spark/pyspark代码,并利用其读取方法。
您可以在他们的文档中看到,如何从SQL数据库或一般情况下通过SQL数据库进行读取。甚至从查询中读取数据,如以下示例所示:
# Read data from a query
df = spark.read \
.format("com.databricks.spark.redshift") \
.option("url", "jdbc:redshift://redshifthost:5439/database?user=username&password=pass") \
.option("query", "select x, count(*) my_table group by x") \
.option("tempdir", "s3n://path/for/temp/data") \
.load()
我发现AWS Glue只实现了spark功能的一小部分,所以当您有复杂的工作要做时,我建议您使用spark/pySpark