Spark将DataFrame写入jdbc错误

Posted

技术标签:

【中文标题】Spark将DataFrame写入jdbc错误【英文标题】:Spark write DataFrame out jdbc error 【发布时间】:2016-11-30 08:19:35 【问题描述】:

我想像这样将预测结果DataFrame写回oracle数据库: model.transform(testDate).write.mode(SaveMode.Overwrite).j​​dbc(url,"b_spark_tst",prop)

但我收到此错误消息:

Exception in thread "main" java.lang.IllegalArgumentException: Can't get JDBC type for array<string>

谁能帮助我如何将 DataFrames 写入数据库?

谢谢!

更新:

这就是我的 DataFrame 架构的样子:

root
 |-- CATEG: string (nullable = true)
 |-- COMM: string (nullable = true)
 |-- label: double (nullable = true)
 |-- words: array (nullable = true)
 |    |-- element: string (containsNull = true)
 |-- features: vector (nullable = true)
 |-- rawPrediction: vector (nullable = true)
 |-- probability: vector (nullable = true)
 |-- prediction: double (nullable = true)

【问题讨论】:

如何定义您想要覆盖的表?数据框的模式结构如何? 更新了架构结构。我认为单词专栏将是问题所在。我还没有在数据库中创建我的表.. 我应该吗? :) 如果我修改我的代码:model.transform(testDate).select("CATEG" , "COMM" , "label" , "fatures" , "rawPrediction" , "probability" , "prediction" ).write.mode(SaveMode.Append).jdbc(url,"b_spark_tst",prop) 我没有看到标签异常.. :( 只尝试一列,创建并附加到现有表,在此处提供结果作为注释。 引起:java.sql.BatchUpdateException: ORA-12899: value too large for column "KALLER_USR"."B_SPARK_TST"."COMM" (实际:291,最大值:255 怎么会发生? ? 我已经创建了带有 varchar(4000) 列的表 【参考方案1】:

我遇到了同样的问题,这与您尝试将元素字段保存在单词字段数组中的方式有​​关。一种解决方案是将该数组保存为字符串。

就我而言,我有:

 |-- jurisdiction_names: array (nullable = true)
 |    |-- element: string (containsNull = true)

我正在使用 pyspark 做的是

newDataFrame = completeDataFrame.select("jurisdiction_names")

我得到了

+--------------------+
|  jurisdiction_names|
+--------------------+
|             [Paris]|
|         [Amsterdam]|
|      [Santa Monica]|
|[DISTRICT OF COLU...|
|             [Paris]|
|[Illinois State, ...|
+--------------------+

使用新的数据框,您可以轻松地操作信息。

【讨论】:

@Nathan Tuggy 你能检查一下并提供解决方案吗-***.com/questions/56151363/… @CodeRunner:不要 ping 寻求特定问题帮助的人。如果他们可以提供帮助,他们可能无论如何都会看到它,并且不会欣赏被窃听。 (Ping 一个随机的 editor 更糟糕:我对 Spark 一无所知,所以即使我愿意也无法为您提供任何帮助。)

以上是关于Spark将DataFrame写入jdbc错误的主要内容,如果未能解决你的问题,请参考以下文章

第八篇|Spark SQL百万级数据批量读写入MySQL

Spark:将DataFrame写入Mysql

如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式

使用 Apache Spark 1.4.0 写入 Oracle 数据库

scala实战之spark源码修改(能够将DataFrame按字段增量写入mysql数据表)

Spark SQL - 如何将 DataFrame 写入文本文件?