首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可以在Spark?中写入MEDIUMTEXT类型的MySQL列。

问可以在Spark?中写入MEDIUMTEXT类型的MySQL列。
EN

Stack Overflow用户
提问于 2019-08-08 15:44:28
回答 1查看 336关注 0票数 2

我正在使用Spark SQL从一个MySQL表中读入一个数据框,其中有一列的类型为MEDIUMTEXT。当我将数据框原封不动地写入新表中时,该列现在的类型为TEXT,并且我得到了一个MySQL MysqlDataTruncation异常。

我不知道我是不是运气不好,或者有什么方法可以告诉Spark SQL特定于MySQL的结果列类型是什么。

在座有人对这个问题有所了解吗?

EN

回答 1

Stack Overflow用户

发布于 2020-09-15 17:49:37

您可以使用createTableColumnTypes自定义列类型,而不是SparkSQL中的默认值。

当然,如果你的代码是这样的,你不能直接使用MEDIUMTEXT/LONGTEXT:

代码语言:javascript
复制
// Saving data to a JDBC source
// Suppose column "name" is the column which you want to write as type MEDIUMTEXT
jdbcDF.write
  .option("createTableColumnTypes", "name MEDIUMTEXT")
  .jdbc("jdbc://...", "xxx tablename", ...)

也许你会得到一个像这样的异常:

代码语言:javascript
复制
org.apache.spark.sql.catalyst.parser.ParseException: 
DataType MEDIUMTEXT is not supported.(line 1, pos 12)

== SQL ==
name MEDIUMTEXT
-----^^^

        at org.apache.spark.sql.catalyst.parser.AstBuilder.$anonfun$visitPrimitiveDataType$1(AstBuilder.scala:1772)
...

但是,当您在MySQL中禁用SQL模式MEDIUMTEXT/LONGTEXT时,STRICT_TRANS_TABLES可以将列类型从my.cnf自动转换为SQL。所以你可以像这样写代码:

代码语言:javascript
复制
// the length of column "name" over the limit of VARCHAR(65535),
// it will be auto converted to MEDIUMTEXT
jdbcDF.write
  .option("createTableColumnTypes", "name VARCHAR(65536)")
  .jdbc("jdbc://...", "xxx tablename", ...)

然后,MySQL将创建一个包含类型为MEDIUMTEXT的列"name“的表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57407612

复制
相关文章

相似问题

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