2015-05-18 70 views
1

我需要從R中非常大的數據集創建一些數據幀。有沒有辦法改變我的工作目錄,以便我創建的R對象被保存到hdfs中?我在/ home下沒有足夠的空間來保存這些大型數據幀,但我需要使用一些數據幀功能,這些功能需要數據幀作爲輸入。R-設置工作目錄到hdfs

+3

也許一個愚蠢的評論,但:有沒有'setwd()'適用於你的目的是什麼? – SabDeM

+0

大多數函數還允許您在任何地方保存對象,而無需移動'getwd()'文件夾。 –

+0

SabDeM:setwd()函數可以指向本地目錄中的不同文件夾,但不能訪問存儲在其他機器上的文件夾(這正是我所要求的) Roman:我將如何在hdfs中創建數據對象?現在我有一個坐在cloudera中的XDF文件,我想從中創建一個非本地數據框。現在,我使用rxCopyToLocal()將hdfs文件複製到本地計算上下文,然後使用rxXdfToDataFrame將文件轉換爲數據框。我怎麼能把這個數據框保存在hdfs而不是我的/ home文件夾中? – Laura

回答

1

如果我們使用數據框對hdfs的數據進行一些操作,我們在技術上使用內存而不是磁盤空間。因此,限制因素將是內存(RAM),而不是任何工作目錄中的可用磁盤空間,並且更改工作目錄不會有太大意義。

您不需要將文件從hdfs複製到本地計算上下文,以將其作爲數據框處理。

使用rxReadXdf()直接將xdf數據集轉換爲hdfs本身的數據框。

這樣的事情(假設你是在Hadoop的計算上下文):

airDS <- RxTextData(file="/data/revor/AirlineDemoSmall.csv", fileSystem=hdfFS) 
# making a text data source from a csv file at above hdfs location 
# hdfsFS is the object storing hadoop fileSystem details using RxHdfsFileSyStem() 

airxdf <- RxXdfData(file= "/data/AirlineXdf") 
# specifying the location to create the composite xdf file in hdfs 
# make sure this location exits in hdfs 


airXDF <- rxImport(inFile=airDS, outFile=airxdf) 
# Importing csv to composite xdf 


airDataFrame <- rxReadXdf(file=airXDF) 

# Now airDataFrame is a dataframe in memory 
# use class(airDataframe) to double check 
# do your required operations on this data frame 
+0

謝謝你的作品(儘管需要一段時間)!你可以向我解釋爲什麼rxReadXdf不會遇到RAM空間問題,因爲使用rxHadoopCopyToLocal,那麼rxXdfToDataFrame呢? – Laura