我在MySQL数据库中有一个表,该表包含名为activity
的列,该列的数据类型为BIT。转换为INT时,其值可以为1,2或3。
在AWS Glue中使用搜寻器时,它将activity
识别为BOOLEAN。我尝试编辑表的架构并将activity
的数据类型更改为INT,但是在运行作业时Glue仍将其读取为BOOLEAN。
我也曾尝试使用ApplyMapping将其转换为INT,但没有成功。
关于如何解决此问题的任何想法?
答案 0 :(得分:1)
我通过将查询下推到MySQL数据库(使用以下命令将其读入Glue时将BIT转换为INT)来解决了该问题:
pushdown_query = "(SELECT col1, CAST(activity AS INT) AS activity FROM my_table) my_table"
df = glueContext.read.format("jdbc")\
.option("driver", "com.mysql.jdbc.Driver") \
.option("url", db_url) \
.option("dbtable", pushdown_query) \
.option("user", db_user) \
.option("password", db_pass).load()
答案 1 :(得分:0)
您可以改用spark / pySpark代码读取MySQL数据库中的表。 例如,使用pySpark将如下所示:
jdbcUrl = "jdbc:mysql://{0}:{1}/{2}".format(jdbcHostname, jdbcPort, jdbcDatabase)
connectionProperties = {
"user" : jdbcUsername,
"password" : jdbcPassword,
"driver" : "com.mysql.jdbc.Driver"
}
employees_table = spark.read.jdbc(jdbcUrl, "employees", connectionProperties)
您可以在此链接上找到更多信息:Spark Data Sources 希望在推断架构方面,spark会比AWS Glue做得更好。