从MySQL读取位数据类型并使用AWS Glue转换为Redshift的问题

时间:2018-10-25 14:59:57

标签: mysql pyspark aws-glue

我在MySQL数据库中有一个表,该表包含名为activity的列,该列的数据类型为BIT。转换为INT时,其值可以为1,2或3。

在AWS Glue中使用搜寻器时,它将activity识别为BOOLEAN。我尝试编辑表的架构并将activity的数据类型更改为INT,但是在运行作业时Glue仍将其读取为BOOLEAN。

我也曾尝试使用ApplyMapping将其转换为INT,但没有成功。

关于如何解决此问题的任何想法?

2 个答案:

答案 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做得更好。