从AWS RDS(MySQL)加载表时,是否可以强制模式定义



我正在使用apache spark从 mySQL 数据库中读取来自 aws aws rds rds 的数据。

实际上也从数据库中推断了架构。不幸的是,该表的列之一是类型TINYINT(1)(列名称:Active)。active列具有以下值:

  • 非活动
  • 活动
  • 未决
  • 等。

Spark将TINYINT(1)识别为 booleantype 。因此,他将active中的所有值更改为truefalse。结果,我无法识别值。

在加载表发射时是否可以强制架构定义?

不是 spark TINYINT类型转换为boolean,而是引擎盖下使用的J-Connector。

因此,实际上,您无需为该问题指定架构。因为实际引起的是将数据类型TINYINT(1)视为BIT类型的JDBC驱动程序(因为服务器在创建表时默默转换BIT-> TINYINT(1))。

您可以检查MySQL官方连接器/J配置属性指南中JDBC连接器的所有提示和捕获。

您只需要通过在URL连接中添加以下内容来传递JDBC连接器的正确参数:

val newUrl = s"$oldUrl&tinyInt1isBit=false"
val data = spark.read.format("jdbc")
  .option("url", newUrl)
  // your other jdbc options
  .load

您可以定义模式,并在使用

阅读时使用它
spark.read.schema(Schema)

Spark Docs

示例如何定义模式:

// The schema is encoded in a string
val schemaString = "name age"
// Generate the schema based on the string of schema
val fields = schemaString.split(" ")
  .map(fieldName => StructField(fieldName, StringType, nullable = true))
val schema = StructType(fields)

现在您可以使用预定义的架构读取数据:

spark.read.schema(schema).function_to_read_data

相关内容

  • 没有找到相关文章

最新更新