2017-06-18 61 views
3

我在h中使用h2o軟件包進行建模。爲此,我想使用h2o.importfile()讀取大小約爲1.5 GB的數據集。我用線讀取h2o中的大文件(1.5 GB)R

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$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 

就如何解決這個問題的任何幫助啓動H2O服務器? 注意:分配大於1499mb的內存也會給我一個錯誤(無法分配內存)。我使用的是16GB RAM環境

編輯:我下載了64位版本的Java,並將我的文件更改爲csv文件。然後,我可以將max_mem_size分配給5G,問題就解決了。

對於其他人誰面對的問題: 1.下載64位JDK 2的最新版本執行下面的一行行

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

嘗試這個? https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/howto/FAQ.md – CPak

回答

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

另一種選擇是將其加載爲R從.rds文件,並使用as.h2o()功能:

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

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

rds可能是壓縮的,所以你的csv文件可能是10GB。但H2O將讀取* .csv.gz文件,因此您可以重新壓縮文件。我建議走這條路線,而不是使用'as.h2o()'來處理大量數據。 (例如,如果你「只有」有16GB,那麼同時運行R和H2O,並且爲它們提供足夠的內存以用於10GB數據集是行不通的。) –

2

您與32位Java運行時,這限制了記憶,你可以啓動H2O。一個線索是它不會以更高的max_mem_size開始。另一個線索是它說「客戶端虛擬機」。

你想要64位Java代替。 64位版本會說「服務器虛擬機」。你可以從這裏下載Java SE 8 JDK:

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

根據你所描述的東西,我建議設置max_mem_size =「δG」以上,這將很好地工作在系統上,一旦你有安裝了正確版本的Java。