我使用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
但是它仍然截断文件中的数据。
答案 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对象。