Параметризованная / многоразовая работа AWS Glue - PullRequest
0 голосов
/ 19 января 2019

Я новичок в AWS и пытаюсь создать параметризованное задание AWS Glue, которое должно иметь входные параметры:

  1. Datasource
  2. Размер данных
  3. Count
  4. Список переменных

Кто-нибудь делал что-то подобное раньше?

Ответы [ 2 ]

0 голосов
/ 22 января 2019
args = getResolvedOptions(sys.argv, ['JOB_NAME','source_db','source_table','count','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_table'], transformation_ctx = "sample_data") 
df_0 = df_new.toDF() 
df_0.registerTempTable("spark_dataframe") 
new_data = spark.sql("Select * from spark_dataframe") 
sample = new_data.limit(args['count'])
sample.repartition(1).write.format('csv').options(delimiter=',',header=True).save("s3://"+ args['dest_folder'] +"/")
job.commit()

I am getting error for line 
sample = new_data.limit(args['count'])

error: 
py4j.Py4JException: Method limit([class java.lang.String]) does not exist 

but the argument passed is not a string.
0 голосов
/ 21 января 2019

Прежде всего, я не уверен, что вы сможете ограничить данные размером.Вместо этого я предлагаю ограничить данные количеством строк.Две из первых переменных, которые вы можете вставить в свои задания, как я описал в Параметры ввода клеев AWS .Когда дело доходит до списка переменных, если это большое количество переменных, я беспокоюсь, что вы не сможете предоставить эти входные данные стандартным способом.В этом случае я предлагаю предоставить эти переменные так же, как данные, я имею в виду, используя плоский файл.Например:

var1;var2;var3
1;2;3 

Подводя итог, я предлагаю определить следующие входные переменные:

  1. Источник данных (путь к месту в S3, где вы храните данные, вы также можетеразделите эту переменную на две переменные - базу данных и таблицу (в каталоге данных Glue))
  2. Количество строк (количество строк, которые вы хотите выбрать)
  3. Источник переменных (путь к месту в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 ()

Конечно, вы также должныобеспечить правильные входные переменные в конфигурации работы клея.

...