我使用Apache从MySQL数据库读取AWS 中的数据。
它实际上也是从数据库中推断模式。不幸的是,表的一个列是TINYINT(1)类型(列名: active)。active列具有以下值:
Spark将BooleanType.识别为TINYINT(1)因此,他将active中的所有值更改为true或false。因此,我无法识别价值。
是否可以在加载表时强制执行模式定义?
发布于 2017-02-27 08:53:37
将类型转换为boolean的不是TINYINT spark,而是遮罩下使用的j-连接器。
因此,实际上您不需要为该问题指定模式。因为导致这种情况的实际上是jdbc驱动程序,它将数据类型TINYINT(1)视为BIT类型(因为服务器在创建表时静默地转换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发布于 2017-02-27 08:30:02
您可以定义架构,并在使用
spark.read.schema(Schema)如何定义架构的示例:
// 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_datahttps://stackoverflow.com/questions/42480888
复制相似问题