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).jdbc(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错误的主要内容,如果未能解决你的问题,请参考以下文章
如果 Dataframe 具有不同的模式,则使用附加模式的 Spark JDBC Oracle 写入也会更改表模式
使用 Apache Spark 1.4.0 写入 Oracle 数据库