首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从AWS (MySQL)加载表时是否可以强制进行模式定义?

问从AWS (MySQL)加载表时是否可以强制进行模式定义?
EN

Stack Overflow用户
提问于 2017-02-27 08:26:19
回答 2查看 468关注 0票数 3

我使用Apache从MySQL数据库读取AWS 中的数据。

它实际上也是从数据库中推断模式。不幸的是,表的一个列是TINYINT(1)类型(列名: active)。active列具有以下值:

  • 非主动
  • 活动的
  • 待定
  • 等。

Spark将BooleanType.识别为TINYINT(1)因此,他将active中的所有值更改为true或false。因此,我无法识别价值。

是否可以在加载表时强制执行模式定义?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-27 08:53:37

将类型转换为boolean的不是TINYINT spark,而是遮罩下使用的j-连接器。

因此,实际上您不需要为该问题指定模式。因为导致这种情况的实际上是jdbc驱动程序,它将数据类型TINYINT(1)视为BIT类型(因为服务器在创建表时静默地转换BIT -> TINYINT(1) )。

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

只需将以下内容添加到url连接中,就可以传递jdbc连接器的正确参数:

代码语言:javascript
复制
val newUrl = s"$oldUrl&tinyInt1isBit=false"

val data = spark.read.format("jdbc")
  .option("url", newUrl)
  // your other jdbc options
  .load
票数 3
EN

Stack Overflow用户

发布于 2017-02-27 08:30:02

您可以定义架构,并在使用

代码语言:javascript
复制
spark.read.schema(Schema)

火花文档

如何定义架构的示例:

代码语言:javascript
复制
// 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)

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

代码语言:javascript
复制
spark.read.schema(schema).function_to_read_data
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42480888

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档