我已经使用rjdbc成功连接本地R3.1.2( win7 64位rstudio)和远程hive服务器。
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:
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
是我的误用还是其他需要的方法?
发布于 2015-02-21 01:53:48
我有一个部分的答案。您对dbWriteTable的参数是相反的。模式是dbWriteTable(连接、tableName、数据),文档读取dbWriteTable(conn, name, value, ...)。话虽如此,我也没有发现‘正确’的表单工作,而是产生以下错误消息:
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中没有正确解析。除了手动修复,我对此不太确定。
发布于 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上,这个限制甚至更低,我找不到修改这个限制的方法。
https://stackoverflow.com/questions/28211999
复制相似问题