【问题标题】:R- set working directory to hdfsR-将工作目录设置为hdfs
【发布时间】:2015-05-18 17:55:35
【问题描述】:

我需要从 R 中非常大的数据集创建一些数据框。有没有办法更改我的工作目录,以便将我创建的 R 对象保存到 hdfs 中? /home 下没有足够的空间来保存这些大数据框,但是我需要使用一些需要数据框作为输入的数据框函数。

【问题讨论】:

  • 也许是一个愚蠢的评论,但是:setwd() 是否适合您的目的?
  • 大多数功能还允许您将对象保存在任何位置,而无需移动 getwd() 文件夹。
  • SabDeM:setwd() 函数可以指向本地目录中的不同文件夹,但它不能访问存储在其他机器上的文件夹(这是我要问的) Roman:我如何创建一个hdfs中的数据对象?现在我在 cloudera 中有一个 XDF 文件,我想从中创建一个非本地数据框。现在,我使用 rxCopyToLocal() 将 hdfs 文件复制到本地计算上下文,然后使用 rxXdfToDataFrame 将文件转换为数据框。如何将此数据框保存在 hdfs 上而不是我的 /home 文件夹中?

标签: r out-of-memory working-directory revolution-r


【解决方案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

【讨论】:

  • 谢谢你这个作品(虽然它需要一段时间)!你能向我解释为什么 rxReadXdf 没有遇到 RAM 空间问题,而使用 rxHadoopCopyToLocal 然后 rxXdfToDataFrame 呢?
猜你喜欢
  • 2015-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多