jdbc方言在向hive写入spark时

zzzyeukh  于 2021-06-26  发布在  Hive
关注(0)|答案(0)|浏览(486)

我正在尝试通过jdbc连接将Dataframe从spark 2.2.0写入Hive2.1。我知道这不是推荐的方法,应该配置使用hive-site.xml的直接连接,但由于我无法控制的因素,这不是我目前的选择……所以我现在只能使用jdbc。
我可以使用jdbc从配置单元中读取数据,但必须重写jdbc方言quoteidentifier方法并指定fetchsize,才能在spark中实际看到Dataframe的任何输出。
虽然不方便,但我现在还可以。但是,我现在回Hive有困难。我想我需要对jdbc方言进行额外的更改,以便在收到以下错误消息时进行回写:

Caused by: org.apache.hive.service.cli.HiveSQLException: Error while 
compiling statement: FAILED: ParseException line 1:28 cannot recognize input 
near '.' 'name' 'TEXT' in column type

这是我通过jdbc阅读的过程:
1.)用我的用户名、密码、url和驱动程序创建了db-properties.flat文件。

url=jdbc:hive2://xxxx.com:10000/default
driver=org.apache.hive.jdbc.HiveDriver
user=xxxxxx
password=xxxxxx

2.)打开spark shell并运行以下代码以读取表:

import java.io.Fileimport java.util.Properties
import java.io.FileInputStream
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.{SQLContext, DataFrame}
import org.apache.spark.sql.hive.HiveContext
import org.apache.spark.sql.jdbc.{JdbcDialects, JdbcType, JdbcDialect}

val conf = new SparkConf()
val sqlContext = new HiveContext(sc)
val dbProperties = new Properties

dbProperties.load(new FileInputStream(new File("/home/xxxxxx/db-properties.flat")))
val url = dbProperties.getProperty("url")
val jdbcDriver = dbProperties.getProperty("driver")
val jdbcFetchsize = dbProperties.setProperty("fetchsize","10")

/* Update JDBC dialect */
val HiveDialect = new JdbcDialect { 
override def canHandle(url: String): Boolean = url.startsWith("jdbc:hive2") || url.contains("hive2")
override def quoteIdentifier(colName: String): String ={ s"$colName" }
}

JdbcDialects.registerDialect(HiveDialect)

val myTable  = "xxxxxx"
val df = spark.read.jdbc(url,myTable,dbProperties)

df.show()

3.)我能够读取步骤2中没有问题的数据,但是我不能使用jdbc从spark写入hive。代码如下:

df.write.mode("error").jdbc(url,"newtable",dbProperties)

…导致此错误:

Caused by: org.apache.hive.service.cli.HiveSQLException: Error while 
compiling statement: FAILED: ParseException line 1:28 cannot recognize input 
near '.' 'name' 'TEXT' in column type

有没有人建议我如何修改方言以便从spark jdbc写回hive或者其他建议?谢谢您!

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题