apache-spark - spark jdbc api 在访问具有 Map 数据类型列的配置单元表时出错
问题描述
我有一个tableA
具有以下格式的配置单元表:
> desc tableA;
+--------------------------+-----------------------+-----------------------+--+
| col_name | data_type | comment |
+--------------------------+-----------------------+-----------------------+--+
| statementid | string | |
| batchid | string | |
| requestparam | map<string,string> | |
+--------------------------+-----------------------+-----------------------+--+
我尝试使用以下代码加载数据库:
val tempdf= spark.read.format("jdbc")
.option("driver", "org.apache.hive.jdbc.HiveDriver")
.option("url", "jdbc:hive2://localhost:10000/tempdb")
.option("user","user1")
.option("password","password1")
.option("query","select statementid, batchid, requestparam from tempdb.tableA")
.load()
我的第二次尝试:
val tempdf = spark.read.format("jdbc")
.option("driver", "org.apache.hive.jdbc.HiveDriver")
.option("url", "jdbc:hive2://localhost:10000/tempdb")
.option("user","user1")
.option("password","password1")
.option("dbtable","tempdb.tableA")
.load()
但是map<string,string>
在将源配置单元表加载到 spark 数据集中时,列会导致问题。
线程“主”java.sql.SQLException 中的异常:org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils$.getCatalystType(JdbcUtils.scala:247) 中的 org.apache.spark.sql 中不支持类型 JAVA_OBJECT。 execution.datasources.jdbc.JdbcUtils$.$anonfun$getSchema$1(JdbcUtils.scala:312) at scala.Option.getOrElse(Option.scala:189) at org.apache.spark.sql.execution.datasources.jdbc.JdbcUtils $.getSchema(JdbcUtils.scala:312) 在 org.apache.spark.sql.execution.datasources.jdbc.JDBCRDD$.resolveTable(JDBCRDD.scala:63) 在 org.apache.spark.sql.execution.datasources.jdbc .JDBCRelation$.getSchema(JDBCRelation.scala:226) 在 org.apache.spark.sql.execution.datasources.jdbc.JdbcRelationProvider.createRelation(JdbcRelationProvider.scala:35) 在 org.apache.spark.sql.execution.datasources。 DataSource.resolveRelation(DataSource.scala:354) 在 org.apache.spark。sql.DataFrameReader.loadV1Source(DataFrameReader.scala:326) at org.apache.spark.sql.DataFrameReader.$anonfun$load$3(DataFrameReader.scala:308) at scala.Option.getOrElse(Option.scala:189) at org .apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:308) 在 org.apache.spark.sql.DataFrameReader.load(DataFrameReader.scala:226)
解决方案
推荐阅读
- microsoft-graph-api - microsoft graph api中的用户唯一身份
- android - 未知属性'manifestOutputDirectory'
- json - 关于 Flutter Firestore Rest Api Json 输出
- python - SymPy:简单表达式“a1*a2+a1*a3+a1*a4+a4*a2”的因式分解
- sql-server - 日期时间范围之间的分组值
- javascript - 如何在类转换器上获取无效类型/类型不匹配的警告/错误列表
- cakephp - CakePHP 4.x hasMany foreach
- excel - 从多个 Excel 文件中提取数据并粘贴使用转置和链接 (VBA)
- opencart - 交换到以前的数据库后,Opencart 禁止访问
- mysql - 将 CSV 导入 MariaDB 时出现语法错误