R 使用 RJDBC 不将数据写入 Hive 表

Posted

技术标签:

【中文标题】R 使用 RJDBC 不将数据写入 Hive 表【英文标题】:R using RJDBC not writing data to Hive table 【发布时间】:2016-05-18 22:00:54 【问题描述】:

RJDBC 可以很好地连接到 Hive 并从 Hive 读取数据。但它没有使用 --> dbWriteTable 将数据写入 Hive。

见下文-

options(java.parameters = "-Xmx8g")
library(DBI)
library(rJava)
library(RJDBC)

cp <- c(list.files("/tmp/R_hive_libs/cloudera_hive_jars", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),list.files("/tmp/R_hive_libs/R_hadoop_libs", pattern = "[.]jar", full.names=TRUE, recursive=TRUE),list.files("/tmp/R_hive_libs/R_hadoop_libs/lib", pattern = "[.]jar", full.names=TRUE, recursive=TRUE), recursive=TRUE)

drv <- JDBC(driverClass = "com.cloudera.hive.jdbc4.HS2Driver", classPath=cp)
conn <- dbConnect(drv, "jdbc:hive2://XXXXXX:10000/default", "user", "password")
show_databases <- dbGetQuery(conn, "show databases")
List_of_Tables <- dbListTables(conn)

data1 <- dbGetQuery(conn, "select * from XXX.xxx limit 10000")
data_to_write_back_to_hive <- data.frame(aggregate(data1$xxx.xxx, by=list(Month=data1$xxx.cmp_created_timestamp_month), FUN=sum))
data_to_write_back_to_hive[[2]] <-c(10,20)
colnames(data_to_write_back_to_hive) <- c("Month", "Energy")
dbWriteTable(conn, "xxxx.checking",data_to_write_back_to_hive)

如何将数据写回hive?它给出了以下错误-

.local(conn, statement, ...) 中的错误:在 dbSendUpdate 中执行 JDBC 更新查询失败([Simba]HiveJDBCDriver 错误 处理查询/语句。错误代码:40000,SQL 状态: TStatus(statusCode:ERROR_STATUS, infoMessages:[*org.apache.hive.service.cli.HiveSQLException:错误 编译语句时:失败:ParseException line 1:36 mismatched 在创建表中的“DOUBLE”附近输入“PRECISION”期望) 声明:28:27, org.apache.hive.service.cli.operation.Operation:toSQLException:Operation.java:326, org.apache.hive.service.cli.operation.SQLOperation:prepare:SQLOperation.java:102, org.apache.hive.service.cli.operation.SQLOperation:runInternal:SQLOperation.java:171, org.apache.hive.service.cli.operation.Operation:run:Operation.java:268, org.apache.hive.service.cli.session.HiveSessionImpl:executeStatementInternal:HiveSessionImpl.java:410, org.apache.hive.service.cli.session.HiveSessionImpl:executeStatement:HiveSessionImpl.java:391, sun.reflect.GeneratedMethodAccessor56:invoke::-1, sun.reflect.DelegatingMeth

【问题讨论】:

您可以在哪里找到解决方法?低于 hive 2.0 的版本不支持 PRECISION 关键字 【参考方案1】:

这个问题出现a fair bit。我认为简短的回答是你目前无法做你想做的事。 DBI/JDBC 驱动程序没有元编程语法正确的 HiveQL。

【讨论】:

我猜这是因为 hive 版本? hive 2.0+ 可能适用于此 可能,自从我发帖以来,HIVE 和 EMR 已经有了很多更新。也许有人会更新

以上是关于R 使用 RJDBC 不将数据写入 Hive 表的主要内容,如果未能解决你的问题,请参考以下文章

RJDBC dbGetQuery() 错误创建外部表 HIVE

R语言读取Hive数据表

使用 RJDBC 连接 R 和 Netezza

Spark SQL优化之路——Hive篇

R RJDBC java.lang.OutOfMemoryError

如何使用 R DBI 和 bigrquery 将虚拟 BQ 表写回 BQ?