在R data.frame中写入HDFS

问题描述 投票:2回答:1

背景

我设法用命令读取文件:

dataSet = fread("/usr/bin/hadoop fs -text /pathToMyfile/test.csv")

我的问题:

我想把它(经过一些转换)写入test2:

fwrite(dataSet, file = "| /usr/bin/hadoop dfs -copyFromLocal  -f  - /pathToMyfile/test2.csv")

我的错误:

但这会引发以下错误:

Error in fwrite(dataSet, file = "| /usr/bin/hadoop dfs -copyFromLocal  -f  - /pathToMyfile/test2.csv") : 
  No such file or directory: '| /usr/bin/hadoop dfs -copyFromLocal  -f  - /pathToMyfile/test2.csv'. Unable to create new file for writing (it does not exist already). Do you have permission to write here, is there space on the disk and does the path exist?

我成功尝试过的东西

我通过R函数write测试得到了我的命令

write("test", file =  "| /usr/bin/hadoop fs -copyFromLocal  -f  - /pathToMyfile/test2.csv",)

这项工作完美(意味着我有写作权限)。

请注意,这里我写的是一个字符串,因为write不是为了编写data.frame而设计的。

我试过的东西没有任何成功

我试图用qazxsw poi和qazxsw poi取代qazxsw poi,但我得到了同样的错误。

我知道rhdfs包存在,但我无法安装它

r hdfs
1个回答
3
投票

为什么它不起作用

我假设fwrite()来自fwrite。如果是这样,它想要打开一个不同的文件句柄,并且没有采用指令而不是文件,它应该将数据推送到您指定的管道。你有点使用base :: file(),因为它专门查找和处理管道情况(正如它在文档中所述)。

如果你真的需要使用data.table :: fwrite()

除了data.table :: fwrite()之外,你可以编写一个完全静默的Rscript(或者更小的),没有任何args(将输出打印到stdout)并将该脚本的结果传递给你的hdfs命令。

如果你对其他方法持开放态度

write.csv()和readr :: write_csv()都接受连接,你可以用pipe()来解决问题。它可能就像......一样简单

write.csv

......但它可能没有。 :)

提问者报告说......

write.table

......效果很好(结合这个答案和前一个答案)。我把它提升到了我的答案,以防有人在评论中错过了它。

如果你有耐心,不介意rJava制作叉子是不可能的

正如@rob在他们的回答中所说,RevolutionAnalytics沿着这些方向有data.table。你说你无法安装它,所以它可能不是这个问题的真正“答案”。但是,其他人可能会有相同的问题没有相同的限制,所以我在这里包括它。

请注意,p_in <- pipe('/usr/bin/hadoop dfs -copyFromLocal -f - /pathToMyfile/test2.csv', 'w') write.csv(dataSet, p_in) close(p_in) 的建议是从测试/官方p_in <- pipe('/usr/bin/hdfs dfs -copyFromLocal -f - /pathToMyfile/test2.csv', 'w') sink(file = p_in) data.table::fwrite(dataSet) sink() close(p_in) some code安装。

最近微软一直在将RevolutionAnalytics链接转换为他们自己的东西(他们在前几天意外地让MRAN麻烦)。所以,我不确定这个链接是多么稳定和/或你是否可以相信它是并且将被维护(最后一次提交到那个仓库是4年前,但同一家族的其他东西收到了提交~2或3几年前)。看起来@piccolbo是该软件包的贡献者并且一直活跃在StackOverflow上,也许他们会评论该软件包是否具有长期支持/已经坚如磐石。

© www.soinside.com 2019 - 2024. All rights reserved.