Как мне запросить базу данных JDBC в AWS Glue, используя предложение WHERE с PySpark?

#amazon-web-services #pyspark #aws-glue

#amazon-web-services #pyspark #aws-glue

Вопрос:

У меня есть сценарий Glue, созданный самим автором, и соединение JDBC, хранящееся в каталоге Glue. Я не могу понять, как использовать PySpark для выполнения инструкции select из базы данных MySQL, хранящейся в RDS, на которую указывает мое соединение JDBC. Я также использовал поисковый робот Glue для вывода схемы таблицы RDS, к которой меня интересует запрос. Как мне запросить базу данных RDS, используя предложение WHERE?

Я просмотрел документацию для DynamicFrameReader и класса GlueContext, но, похоже, ни один из них не указывает мне направление, которое я ищу.

Ответ №1:

Это зависит от того, что вы хотите сделать. Например, если вы хотите выполнить select * from table where <conditions> , есть два варианта:

Предполагая, что вы создали поисковый модуль и вставили исходный код в задание AWS Glue следующим образом:

   # Read data from database
    datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "db", table_name = "students", redshift_tmp_dir = args["TempDir"])
  
  • AWS Glue
 # Select the needed fields
selectfields1 = SelectFields.apply(frame = datasource0, paths = ["user_id", "full_name", "is_active", "org_id", "org_name", "institution_id", "department_id"], transformation_ctx = "selectfields1")
filter2 = Filter.apply(frame = selectfields1, f = lambda x: x["org_id"] in org_ids, transformation_ctx="filter2")
  
  • PySpark AWS Glue
 # Change DynamicFrame to Spark DataFrame
dataframe = DynamicFrame.toDF(datasource0)
# Create a view
dataframe.createOrReplaceTempView("students")
# Use SparkSQL to select the fields
dataframe_sql_df_dim = spark.sql("SELECT user_id, full_name, is_active, org_id, org_name, institution_id, department_id FROM assignments WHERE org_id in ("   org_ids   ")")
# Change back to DynamicFrame
selectfields = DynamicFrame.fromDF(dataframe_sql_df_dim, glueContext, "selectfields2")