我想把r中的一个Dataframe写到hadoop配置单元中的一个新表中。我在rodbc包中使用sqlsave(),如下所示。表结构是在hadoop中创建的,但是在将任何数据插入表之前,我遇到了一个错误。错误消息包含在下面。关于如何将r中的Dataframe写入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' )'
1条答案
按热度按时间dohp0rv51#
实际上我也有同样的问题,我需要我们团队的用户开始使用hive,他们中的大多数都是hive用户。到目前为止,我做了以下工作:-在r中创建一个自定义函数,为新的配置单元表自动生成create table语句-在准备配置单元时进行数据类型转换,将因子转换为字符,排列日期格式-生成要加载到配置单元的文本文件-使用rhdfs将文本文件移动到hadoop(在我的示例中是mapr),在您想要的位置(外部表)或加载到配置单元仓库。
希望有人有更好的解决办法,但对我来说这是工作。通过创建r包来实现过程自动化,但我还远远没有完成。