2017-06-18 1 views
3

Ich verwende h2o-Paket für die Modellierung in R. Dazu möchte ich ein Dataset lesen, das eine Größe von etwa 1,5 GB mit h2o.importfile() hat. Ich beginne den h2o Server mit den LinienEine große (1,5 GB) Datei in h2o lesen R

library(h2oEnsemble) 
h2o.init(max_mem_size = '1499m',nthreads=-1) 

Dies erzeugt ein Protokoll

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)` 

Die folgende Zeile ist mir ein Fehler 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$000(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 

Jede Hilfe, wie dieses Problem zu beheben ? Hinweis: Zuweisen von Speicher größer als 1499 MB gibt auch einen Fehler (Speicher kann nicht zugeordnet werden). Ich verwende eine 16GB RAM-Umgebung

Bearbeiten: Ich lade die 64-Bit-Version von Java und änderte meine Datei in eine CSV-Datei. Ich konnte dann max_mem_size 5G zuweisen und das Problem wurde gelöst.

Für andere, die das Problem: 1. Laden Sie die neueste Version von 64-Bit-JDK 2. Führen Sie die folgende Zeile Linie

h2o.init(max_mem_size = '5g',nthreads=-1) 
+0

Versuche dies? https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/howto/FAQ.md – CPak

Antwort

1
train=h2o.importFile(path=normalizePath("C:\\Users\\All data\\traindt.rds") 

Versuchen Sie eine .rds Datei zu laden? Das ist ein R-Binärformat, das von h2o.importFile() nicht gelesen werden kann, so dass es nicht funktioniert. Sie müssen Ihre Trainingsdaten in einem plattformübergreifenden Speicherformat (z. B. CSV, SMVLight usw.) speichern, wenn Sie sie direkt in H2O einlesen möchten. Wenn Sie nicht über eine Kopie in einem anderen Format haben, dann nur eine von R sparen:

# 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")) 

Eine weitere Option ist es in R aus der .rds-Datei zu laden und verwenden Sie die as.h2o() Funktion:

# loads a `train` data.frame for example 
load("C:\\Users\\All data\\traindt.rds") 

# send to H2O cluster 
hf <- as.h2o(train) 
+1

rds ist wahrscheinlich komprimiert, so dass Ihre CSV-Datei 10 GB sein könnte. H2O liest jedoch * .csv.gz-Dateien, sodass Sie Ihre Datei erneut komprimieren können. Ich empfehle diesen Weg, anstatt 'as.h2o()' mit großen Daten zu verwenden. (Z. B. wenn Sie "nur" 16 GB haben, dann läuft R und H2O zur gleichen Zeit, und ihnen genug Speicher für einen 10 GB-Datensatz zu geben, wird nicht funktionieren.) –

2

Sie sind mit 32-Bit-Java ausgeführt wird, die die Begrenzung Speicher, mit dem Sie H2O starten können. Ein Hinweis ist, dass es nicht mit einer höheren max_mem_size starten wird. Ein weiterer Hinweis ist, dass dort "Client VM" steht.

Sie möchten stattdessen 64-Bit-Java. Die 64-Bit-Version wird "Server VM" sagen. Sie können die Java 8 SE JDK hier herunterladen:

http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

Nach dem, was Sie beschrieben haben, ich empfehlen, max_mem_size = ‚6g‘ oder mehr, was auf Ihrem System funktionieren wird, wenn Sie das haben richtige Version von Java installiert.

Verwandte Themen