How to create dynamic dataframe from AWS Glue catalog in local environment?

0

I I have performed some AWS Glue version 3.0 jobs testing using Docker containers as detailed here. The following code outputs two lists, one per connection, with the names of the tables in a database:

import boto3


db_name_s3 = "s3_connection_db"
db_name_mysql = "glue_catalog_mysql_connection_db"

def retrieve_tables(database_name):
    session = boto3.session.Session()
    glue_client = session.client("glue")
    response_get_tables = glue_client.get_tables(DatabaseName=database_name)
    return response_get_tables


s3_tables_list = [table_dict["Name"] for table_dict in retrieve_tables(db_name_s3)["TableList"]]
mysql_tables_list = [table_dict["Name"] for table_dict in retrieve_tables(db_name_mysql)["TableList"]]

print(f"These are the tables from {db_name_s3} db: {s3_tables_list}\n")
print(f"These are the tables from {db_name_mysql} db {mysql_tables_list}")

Now, I try to create a dynamic dataframe with the from_catalog method in this way:

import sys
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
from awsglue.dynamicframe import DynamicFrame

source_activities = glueContext.create_dynamic_frame.from_catalog(
database = db_name, 
table_name =table_name
)

When database="s3_connection_db", everything works fine, however, when I set database="glue_catalog_mysql_connection_db", I get the following error:

Py4JJavaError: An error occurred while calling o45.getDynamicFrame.
: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver

I understand the issue is related to the fact that I am trying to fetch data from a mysql table but I am not sure how to solve this. By the way, the job runs fine on the Glue console.

I would really appreciate some help, thanks!

已提问 2 年前3609 查看次数
1 回答
1
已接受的回答

It looks like you're missing the MySQL driver, you can provide your own JAR files via the "Dependent jars path" parameter. Your code looks fine so I'd assume the error is right, missing drivers/libraries.

AWS
专家
Raphael
已回答 2 年前

您未登录。 登录 发布回答。

一个好的回答可以清楚地解答问题和提供建设性反馈,并能促进提问者的职业发展。

回答问题的准则