首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R使用RJDBC写表以配置单元

R使用RJDBC写表以配置单元
EN

Stack Overflow用户
提问于 2015-01-29 18:12:30
回答 2查看 4.5K关注 0票数 5

我已经使用rjdbc成功连接本地R3.1.2( win7 64位rstudio)和远程hive服务器。

代码语言:javascript
复制
library(RJDBC)
.jinit()
dir = "E:/xxx/jars/hive/" 
for(l in list.files(dir)) {
  .jaddClassPath(paste( dir ,l,sep="")) }
options( java.parameters = "-Xmx8g" ) 
drv <- JDBC("org.apache.hadoop.hive.jdbc.HiveDriver",
        "E:/xxx/jars/hive/hive-jdbc-0.11.0.jar")

conn <- dbConnect(drv,  "jdbc:hive://10.127.130.162:10002/default", "", "" ) 
dbGetQuery(conn, "select * from test.test limit 10 ")

已成功从配置单元读取数据,但无法使用写入R数据帧

dbWriteTable

代码语言:javascript
复制
data(iris)
dbWriteTable(conn, iris , "test.dc_test")

错误返回:

Error in .jcall(md, "Ljava/sql/ResultSet;", "getTables", .jnull("java/lang/String"), : method getTables with signature (Ljava/lang/String;Ljava/lang/String;[Ljava/lang/String;)Ljava/sql/ResultSet; not found

是我的误用还是其他需要的方法?

EN

回答 2

Stack Overflow用户

发布于 2015-02-21 01:53:48

我有一个部分的答案。您对dbWriteTable的参数是相反的。模式是dbWriteTable(连接、tableName、数据),文档读取dbWriteTable(conn, name, value, ...)。话虽如此,我也没有发现‘正确’的表单工作,而是产生以下错误消息:

代码语言:javascript
复制
Error in .local(conn, statement, ...) : 
  execute JDBC update query failed in dbSendUpdate ([Simba][HiveJDBCDriver](500051) ERROR processing query/statement. Error Code: 40000, SQL state: TStatus(statusCode:ERROR_STATUS, sqlState:42000, errorCode:40000, errorMessage:Error while compiling statement: FAILED: ParseException line 1:41 mismatched input 'PRECISION' expecting ) near 'DOUBLE' in create table statement), Query: CREATE TABLE iris (`Sepal.Length` DOUBLE PRECISION,`Sepal.Width` DOUBLE PRECISION,`Petal.Length` DOUBLE PRECISION,`Petal.Width` DOUBLE PRECISION,Species VARCHAR(255)).)

(至少在使用Amazon的JDBC driver for Hive时是这样)。这个错误至少看起来不言而喻,生成的用于插入数据的表的查询在HiveQL中没有正确解析。除了手动修复,我对此不太确定。

票数 1
EN

Stack Overflow用户

发布于 2018-05-23 16:28:59

经过这些年,我仍然找不到一个完整的solution...but这里也是一个局部的,只可用于写小data.frame和如何小从32/64位,mac/win...

首先将dataframe改为字符向量

折叠折叠<- paste0( apply(dataframe,1,function(x) paste0("('",paste0(x,

= "',' "),"')")),折叠= ",“)

然后使用insert将行写入hadoop

dbSendQuery(conn,(“插入到",tbname,”VALUES ",data2hodoop,";“)

在我的PC上,WIN7 64位16G,如果向量'data2hodoop‘大于50M,就会出现错误“C堆栈使用量xxx太接近极限了”;

在我的mac上,这个限制甚至更低,我找不到修改这个限制的方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28211999

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档