问题:
我开始学习hadoop,但是,我需要使用python将许多文件保存到其中。 我好像弄不明白我做错了什么。有人能帮我吗?
下面是我的代码。
我认为HDFS_PATH
是正确的,因为我在安装时没有在设置中更改它。
pythonfile.txt
在我的桌面上(通过命令行运行的python代码也是如此)。
代码:
import hadoopy
import os
hdfs_path ='hdfs://localhost:9000/python'
def main():
hadoopy.writetb(hdfs_path, [('pythonfile.txt',open('pythonfile.txt').read())])
main()
输出 当我运行上述代码时,我得到的只是python本身的一个目录。
iMac-van-Brian:desktop Brian$ $HADOOP_HOME/bin/hadoop dfs -ls /python
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
14/10/28 11:30:05 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
-rw-r--r-- 1 Brian supergroup 236 2014-10-28 11:30 /python
我感觉您正在写入一个名为'/python'的文件,而您希望它是存储该文件的目录
做什么
给你看?
如果它显示文件内容,您只需编辑hdfs_路径以包含文件名(您应该首先删除/python和-rm),否则,请使用pydoop(pip install pydoop)并执行以下操作:
我找到了这个答案here:
对于
subprocess
模块来说,这是一个非常典型的任务。解决方案如下:完整示例
假设您在服务器上,并且与hdfs有一个经过验证的连接(例如,您已经调用了
.keytab
)。您刚刚从a
pandas.DataFrame
创建了一个csv,并希望将其放入hdfs。然后,您可以将文件上载到hdfs,如下所示:
csv文件将存在于
/user/<your-user-name/saved_file.csv
。注意-如果您是从Hadoop中调用的python脚本创建此文件的,则中间csv文件可能存储在一些随机节点上。由于这个文件(可能)不再需要了,所以最好删除它,以免每次调用脚本时都污染节点。您只需添加
os.remove(file_name)
作为上述脚本的最后一行即可解决此问题。相关问题 更多 >
编程相关推荐