在 h2o R 中读取一个大文件(1.5 GB)
Read a large (1.5 GB) file in h2o R
我在 R 中使用 h2o 包进行建模。为此,我想使用 h2o.importfile() 读取一个大小约为 1.5 GB 的数据集。我使用行
启动 h2o 服务器
library(h2oEnsemble)
h2o.init(max_mem_size = '1499m',nthreads=-1)
这会产生一个日志
H2O is not running yet, starting it now...
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)
Starting H2O JVM and connecting: . Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 3 seconds 665 milliseconds
H2O cluster version: 3.10.4.8
H2O cluster version age: 28 days, 14 hours and 36 minutes
H2O cluster name: H2O_started_from_R_Lucifer_jvn970
H2O cluster total nodes: 1
H2O cluster total memory: 1.41 GB
H2O cluster total cores: 4
H2O cluster allowed cores: 4
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
R Version: R version 3.3.2 (2016-10-31)`
下一行给我一个错误
train=h2o.importFile(path=normalizePath("C:\Users\All data\traindt.rds"))
DistributedException from localhost/127.0.0.1:54321, caused by java.lang.AssertionError
DistributedException from localhost/127.0.0.1:54321, caused by java.lang.AssertionError
at water.MRTask.getResult(MRTask.java:478)
at water.MRTask.getResult(MRTask.java:486)
at water.MRTask.doAll(MRTask.java:402)
at water.parser.ParseDataset.parseAllKeys(ParseDataset.java:246)
at water.parser.ParseDataset.access[=12=]0(ParseDataset.java:27)
at water.parser.ParseDataset$ParserFJTask.compute2(ParseDataset.java:195)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1315)
at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Caused by: java.lang.AssertionError
at water.parser.Categorical.addKey(Categorical.java:41)
at water.parser.FVecParseWriter.addStrCol(FVecParseWriter.java:127)
at water.parser.CsvParser.parseChunk(CsvParser.java:133)
at water.parser.Parser.readOneFile(Parser.java:187)
at water.parser.Parser.streamParseZip(Parser.java:217)
at water.parser.ParseDataset$MultiFileParseTask.streamParse(ParseDataset.java:907)
at water.parser.ParseDataset$MultiFileParseTask.map(ParseDataset.java:856)
at water.MRTask.compute2(MRTask.java:601)
at water.H2O$H2OCountedCompleter.compute1(H2O.java:1318)
at water.parser.ParseDataset$MultiFileParseTask$Icer.compute1(ParseDataset$MultiFileParseTask$Icer.java)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1314)
... 5 more
Error: DistributedException from localhost/127.0.0.1:54321, caused by java.lang.AssertionError
关于如何解决这个问题的任何帮助?
注意:分配大于 1499mb 的内存也会给我一个错误(无法分配内存)。我使用的是 16GB 内存环境
编辑:我下载了 64 位版本的 Java 并将我的文件更改为 csv 文件。然后我就可以分配max_mem_size到5G,问题就解决了。
对于遇到问题的其他人:
1.下载最新版64位jdk
2.执行下面一行line
h2o.init(max_mem_size = '5g',nthreads=-1)
您是 运行 32 位 java,这限制了您可以启动 H2O 的内存。一个线索是它不会以更高的 max_mem_size 开头。另一个线索是它说 "Client VM".
您需要 64 位 java。 64 位版本会显示 "Server VM"。您可以从这里下载 Java 8 SE JDK:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根据您的描述,我建议设置 max_mem_size = '6g' 或更多,一旦您安装了正确版本的 Java,这将在您的系统上正常工作。
train=h2o.importFile(path=normalizePath("C:\Users\All data\traindt.rds")
您是否正在尝试加载 .rds
文件?这是 h2o.importFile()
无法读取的 R 二进制格式,因此无法正常工作。如果您想直接将训练数据读入 H2O,则需要以跨平台存储格式(例如 CSV、SMVLight 等)存储训练数据。如果您没有其他格式的副本,那么只需从 R:
保存一个
# loads a `train` data.frame for example
load("C:\Users\All data\traindt.rds")
# save as CSV
write.csv(train, "C:\Users\All data\traindt.csv")
# import from CSV into H2O cluster directly
train = h2o.importFile(path = normalizePath("C:\Users\All data\traindt.csv"))
另一种选择是将其从 .rds
文件加载到 R 中并使用 as.h2o()
函数:
# loads a `train` data.frame for example
load("C:\Users\All data\traindt.rds")
# send to H2O cluster
hf <- as.h2o(train)
我在 R 中使用 h2o 包进行建模。为此,我想使用 h2o.importfile() 读取一个大小约为 1.5 GB 的数据集。我使用行
启动 h2o 服务器library(h2oEnsemble)
h2o.init(max_mem_size = '1499m',nthreads=-1)
这会产生一个日志
H2O is not running yet, starting it now...
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)
Starting H2O JVM and connecting: . Connection successful!
R is connected to the H2O cluster:
H2O cluster uptime: 3 seconds 665 milliseconds
H2O cluster version: 3.10.4.8
H2O cluster version age: 28 days, 14 hours and 36 minutes
H2O cluster name: H2O_started_from_R_Lucifer_jvn970
H2O cluster total nodes: 1
H2O cluster total memory: 1.41 GB
H2O cluster total cores: 4
H2O cluster allowed cores: 4
H2O cluster healthy: TRUE
H2O Connection ip: localhost
H2O Connection port: 54321
H2O Connection proxy: NA
H2O Internal Security: FALSE
R Version: R version 3.3.2 (2016-10-31)`
下一行给我一个错误
train=h2o.importFile(path=normalizePath("C:\Users\All data\traindt.rds"))
DistributedException from localhost/127.0.0.1:54321, caused by java.lang.AssertionError
DistributedException from localhost/127.0.0.1:54321, caused by java.lang.AssertionError
at water.MRTask.getResult(MRTask.java:478)
at water.MRTask.getResult(MRTask.java:486)
at water.MRTask.doAll(MRTask.java:402)
at water.parser.ParseDataset.parseAllKeys(ParseDataset.java:246)
at water.parser.ParseDataset.access[=12=]0(ParseDataset.java:27)
at water.parser.ParseDataset$ParserFJTask.compute2(ParseDataset.java:195)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1315)
at jsr166y.CountedCompleter.exec(CountedCompleter.java:468)
at jsr166y.ForkJoinTask.doExec(ForkJoinTask.java:263)
at jsr166y.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:974)
at jsr166y.ForkJoinPool.runWorker(ForkJoinPool.java:1477)
at jsr166y.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:104)
Caused by: java.lang.AssertionError
at water.parser.Categorical.addKey(Categorical.java:41)
at water.parser.FVecParseWriter.addStrCol(FVecParseWriter.java:127)
at water.parser.CsvParser.parseChunk(CsvParser.java:133)
at water.parser.Parser.readOneFile(Parser.java:187)
at water.parser.Parser.streamParseZip(Parser.java:217)
at water.parser.ParseDataset$MultiFileParseTask.streamParse(ParseDataset.java:907)
at water.parser.ParseDataset$MultiFileParseTask.map(ParseDataset.java:856)
at water.MRTask.compute2(MRTask.java:601)
at water.H2O$H2OCountedCompleter.compute1(H2O.java:1318)
at water.parser.ParseDataset$MultiFileParseTask$Icer.compute1(ParseDataset$MultiFileParseTask$Icer.java)
at water.H2O$H2OCountedCompleter.compute(H2O.java:1314)
... 5 more
Error: DistributedException from localhost/127.0.0.1:54321, caused by java.lang.AssertionError
关于如何解决这个问题的任何帮助? 注意:分配大于 1499mb 的内存也会给我一个错误(无法分配内存)。我使用的是 16GB 内存环境
编辑:我下载了 64 位版本的 Java 并将我的文件更改为 csv 文件。然后我就可以分配max_mem_size到5G,问题就解决了。
对于遇到问题的其他人: 1.下载最新版64位jdk 2.执行下面一行line
h2o.init(max_mem_size = '5g',nthreads=-1)
您是 运行 32 位 java,这限制了您可以启动 H2O 的内存。一个线索是它不会以更高的 max_mem_size 开头。另一个线索是它说 "Client VM".
您需要 64 位 java。 64 位版本会显示 "Server VM"。您可以从这里下载 Java 8 SE JDK:
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
根据您的描述,我建议设置 max_mem_size = '6g' 或更多,一旦您安装了正确版本的 Java,这将在您的系统上正常工作。
train=h2o.importFile(path=normalizePath("C:\Users\All data\traindt.rds")
您是否正在尝试加载 .rds
文件?这是 h2o.importFile()
无法读取的 R 二进制格式,因此无法正常工作。如果您想直接将训练数据读入 H2O,则需要以跨平台存储格式(例如 CSV、SMVLight 等)存储训练数据。如果您没有其他格式的副本,那么只需从 R:
# loads a `train` data.frame for example
load("C:\Users\All data\traindt.rds")
# save as CSV
write.csv(train, "C:\Users\All data\traindt.csv")
# import from CSV into H2O cluster directly
train = h2o.importFile(path = normalizePath("C:\Users\All data\traindt.csv"))
另一种选择是将其从 .rds
文件加载到 R 中并使用 as.h2o()
函数:
# loads a `train` data.frame for example
load("C:\Users\All data\traindt.rds")
# send to H2O cluster
hf <- as.h2o(train)