AWS Клей ETL не выводит все записи - PullRequest
0 голосов
/ 07 февраля 2020

У меня есть сценарий ETL, предназначенный для выравнивания набора из 4 миллионов JSON файлов с использованием Relationalize. Этот сценарий отлично работает на тестовом наборе из 300 файлов, но при запуске на S3 Bucket с 4 миллионами он создает только 1500 ~ выходных файлов, каждый из которых содержит данные для одной записи.

Я пробовал несколько разных конфигураций этого скрипта, но все они дают один и тот же результат:

import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job

## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])

sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# Begin variables to customize with your information
glue_source_database = "mydatabase"
glue_source_table = "mytable"
glue_temp_storage = "s3://my-data/glue_temp"
glue_relationalize_output_s3_path = "s3://my-data/glue_output/mytable_flat/"
dfc_root_table_name = "root" #default value is "roottable"
# End variables to customize with your information


datasource0 = glueContext.create_dynamic_frame.from_catalog(database = glue_source_database, table_name = glue_source_table, transformation_ctx = "datasource0")
dfc = Relationalize.apply(frame = datasource0, staging_path = glue_temp_storage, name = dfc_root_table_name, transformation_ctx = "dfc")
origdata = dfc.select(dfc_root_table_name)

origdataoutput = glueContext.write_dynamic_frame.from_options(frame = origdata, connection_type = "s3", connection_options = {"path": glue_relationalize_output_s3_path}, format = "json", transformation_ctx = "origdataoutput")

1 Ответ

0 голосов
/ 07 февраля 2020

Похоже, вы только передаете таблицу root на glueContext.create_dynamic_frame.from_catalog. Когда вы выполняете реляционизацию, он возвращает DynamicFrameCollection. Чтобы увидеть список динамических c кадров из этой коллекции, попробуйте распечатать их, используя dfc.keys().

Обратитесь к шагу 6 в this и this , чтобы понять, как работает реляционализация.

...