如何从R Revolution Enterprise中获取分离的大文件中的所有数据?

时间:2016-03-17 09:46:12

标签: r knime revolution-r

我使用RevoR entreprise来处理大型数据文件。文档中给出的示例说明将使用rxImport循环将10个文件(每个1000000行)导入为数据集:

setwd("C:/Users/Fsociety/Bigdatasamples")
Data.Directory <- "C:/Users/Fsociety/Bigdatasamples"
Data.File <- file.path(Data.Directory,"mortDefault")
mortXdfFileName <- "mortDefault.xdf"

append <- "none"
for(i in 2000:2009){
importFile <- paste(Data.File,i,".csv",sep="")
mortxdf <- rxImport(importFile, mortXdfFileName, append = append, overwrite = TRUE, maxRowsByCols = NULL)
append <- "rows"    
}
mortxdfData <- RxXdfData(mortXdfFileName)
knime.out <- rxXdfToDataFrame(mortxdfData)

这里的问题是我在数据集中只获得500000行,因为maxRowsByCols参数默认为1e+06我将其更改为更高的值然后更改为NULL但是它仍然截断文件中的数据。

2 个答案:

答案 0 :(得分:1)

由于您要导入XDF maxRowsByCols并不重要。另外,在最后一行你读到了data.frame,这种方式首先打败了使用XDF的目的。

此代码对我的数据http://packages.revolutionanalytics.com/datasets/mortDefault.zip起作用,这是我假设你正在使用的。

500K行归因于rowsPerRead参数,但这只是确定块大小。所有数据都以50万的增量读入,但可以根据您的需要进行更改。

setwd("C:/Users/Fsociety/Bigdatasamples")
Data.Directory <- "C:/Users/Fsociety/Bigdatasamples"
Data.File <- file.path(Data.Directory, "mortDefault")
mortXdfFileName <- "mortDefault.xdf"

append <- "none"
overwrite <- TRUE
for(i in 2000:2009){
  importFile <- paste(Data.File, i, ".csv", sep="")
  rxImport(importFile, mortXdfFileName, append=append, overwrite = TRUE)
  append <- "rows"
  overwrite <- FALSE
}

rxGetInfo(mortxdfData, getBlockSizes = TRUE)

# File name: C:\Users\dnorton\OneDrive\R\MarchMadness2016\mortDefault.xdf 
# Number of observations: 1e+07 
# Number of variables: 6 
# Number of blocks: 20 
# Rows per block (first 10): 5e+05 5e+05 5e+05 5e+05 5e+05 5e+05 5e+05 5e+05 5e+05 5e+05
# Compression type: zlib 

答案 1 :(得分:1)

修复了问题,RxXdfData()有一个maxrowbycols限制,将其更改为NULL会将整个rxXdfData转换为Knime的data.frame对象。