Прежде всего, я не уверен, что вы сможете ограничить данные размером.Вместо этого я предлагаю ограничить данные количеством строк.Две из первых переменных, которые вы можете вставить в свои задания, как я описал в Параметры ввода клеев AWS .Когда дело доходит до списка переменных, если это большое количество переменных, я беспокоюсь, что вы не сможете предоставить эти входные данные стандартным способом.В этом случае я предлагаю предоставить эти переменные так же, как данные, я имею в виду, используя плоский файл.Например:
var1;var2;var3
1;2;3
Подводя итог, я предлагаю определить следующие входные переменные:
- Источник данных (путь к месту в S3, где вы храните данные, вы также можетеразделите эту переменную на две переменные - базу данных и таблицу (в каталоге данных Glue))
- Количество строк (количество строк, которые вы хотите выбрать)
- Источник переменных (путь к месту вS3, где вы храните файл с переменными)
Это пример кода:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME','SOURCE_DB','SOURCE_TAB','NUM_ROWS','DEST_FOLDER'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
df_new = glueContext.create_dynamic_frame.from_catalog(database = args['SOURCE_DB'], table_name = args['SOURCE_TAB'], transformation_ctx = "full_data")
df_0 = df_new.toDF()
df_0.createOrReplaceTempView("spark_dataframe")
choice_data = spark.sql("Select x,y,z from spark_dataframe")
choice_data = choice_data.limit(int(args['NUM_ROWS']))
choice_data.repartition(1).write.format('csv').mode('overwrite').options(delimiter=',',header=True).save("s3://"+ args['DEST_FOLDER'] +"/")
job.commit ()
Конечно, вы также должныобеспечить правильные входные переменные в конфигурации работы клея.