我想将 R 中的数据框写入 Hadoop Hive 中的新表。我在 RODBC 包中使用 sqlSave() ,如下所示。表结构是在 Hadoop 中创建的,但在向表中插入任何数据之前出现错误。下面包含错误消息。关于如何将 R 中的数据框写入 Hadoop 中的新表有什么建议吗?
代码
column_1 = c("a","b","c")
column_2 = c("d","e","f")
column_3 = c("g","h","i")
test.df = data.frame(column_1,column_2,column_3)
columnTypes <- list(column_1='varchar(255)',
column_2='varchar(255)',
column_3='varchar(255)')
sqlSave(dbConn, test.df, 'db.tablename', verbose=T, append=T, rownames = F, fast = F, varTypes = columnTypes)
错误信息
Query: CREATE TABLE db.tablename ("column_1" varchar(255), "column_2" varchar(255), "column_3" varchar(255))
Query: INSERT INTO db.tablename ( "column_1", "column_2", "column_3" ) VALUES ( 'a', 'd', 'g' )
Error in sqlSave(dbConn, test.df, "db.tablename", verbose = T, :
[Microsoft][HiveODBC] (55) Insert operation is not support for table: HIVE.db.tablename
[RODBC] ERROR: Could not SQLExecDirect 'INSERT INTO db.tablename ( "column_1", "column_2", "column_3" ) VALUES ( 'a', 'd', 'g' )'
最佳答案
像这样设置你的连接:
library(odbc)
con <- DBI::dbConnect(odbc::odbc(),
Driver ="HIVE",
Host = "myhadoopurl.com",
Port = "8443",
Schema = "my_schema_db_name",
HttpPath = "gateway/default/hive",
AuthMech = "3",
HiveServerType = "2",
ThriftTransport = "2",
UID = my_user_name,
PWD = my_pw)
#Got an error here, that Hive doesn't like the iris . in the column names so...
names(iris)<-gsub("\\.","_",names(iris))
DBI::dbWriteTable(con, "my_schema_db_name.iris", iris)
我在这方面遇到了一些权限被拒绝的错误,这些错误具有误导性。在连接设置和 dbWriteTable 函数上修改模式名称后,它起作用了。追加:
DBI::dbWriteTable(con, "my_schema_db_name.iris", iris, append=TRUE)
它不起作用,如果我将连接架构留空并使用 Hive 的默认架构进行连接,这就是我遇到权限错误的地方。
关于r - 将 R 数据帧写入 Hadoop Hive,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42559958/