将 R data.frame 强制转换为 nz.data.frame 时出错

Posted

技术标签:

【中文标题】将 R data.frame 强制转换为 nz.data.frame 时出错【英文标题】:Error in coercing R data.frame to a nz.data.frame 【发布时间】:2017-06-16 08:53:01 【问题描述】:

R 数据框中的一列中有“,”(逗号),因此,当我尝试将其转换为 netezza 数据框时,它会抛出以下错误:

nzQuery(sqlCommandUpload) 中的错误:HY008 51 操作已取消 01000 1 无法写入 nzlog/坏文件 01000 1 无法写入 nzlog/坏文件 HY000 46 错误:外部表:错误输入行数达到最大错误限制

如何在不更改数据的情况下实现这一目标?

使用这样的数据框,一切正常:

当数据框如下时出现错误:

library(nzr)
library(forecast)
library (reshape2)
library(doBy)
nzDisconnect()
nzConnectDSN('DSNInfo', force=FALSE , verbose=TRUE)


#read file
test2<-read.csv("test_df.csv", stringsAsFactors = F)

# convert to nz dataframe, no error
#nzdf.test2<-as.nz.data.frame(test2)

nzdf.d<-as.nz.data.frame(d)

# copy 
#test<-test2

testd<-d

#replace one of the values containing a ","
#test$Category[1]<-"a,b"

testd$Category[1]<-"Bed, Bath & Towels"

# converting to nz gives error
#nzdf.test<-as.nz.data.frame(test)

nzdf.testd<-as.nz.data.frame(testd)

#remove ","
test$Category <- gsub(",","",test$Category)

# converting to nz dataframe, gives no error
nzdf.test<-as.nz.data.frame(test)

【问题讨论】:

显示您的 R 代码并告诉我们您正在使用哪些库。 @ScottMcG 使用所需的详细信息编辑了问题 【参考方案1】:

您是否检查过您的数据中是否有空值 (NA)?我遇到了同样的问题,但是当我检查 Netezza-R 文档时,我发现您无法将 Null 写入另一个系统的 Netezza 表中。有提到在这种情况下使用 setOutputNull 函数。

因此,一种解决方法是用 R 数据框中的字符串“NULL”替换空值,这会使数值列变为 varchar,请注意。但幸运的是,“NULL”在您的 netezza 表中自动变为空。唯一的额外工作是您必须稍后将列转换回数字。

希望对你有帮助

【讨论】:

以上是关于将 R data.frame 强制转换为 nz.data.frame 时出错的主要内容,如果未能解决你的问题,请参考以下文章

将R data.frame中的几列从整数转换为数字

将两列强制转换为 R 中的 1 列因子和 1 列对应值用于数据框

R:JSON 到 data.frame 的通用展平

将数字转换为data.frame中的字母

使用 RODBC 将 SQL 存储过程结果转换为 data.frame 格式

R: data.frame dist matrix转换