Jar*_*red 2 python hadoop hdfs
我有一个python脚本,当前访问返回JSON的API.然后它接受JSON字符串并将其作为文件保存在本地文件系统上,然后我将其手动移动到HDFS中.我想改变它,所以我的python脚本直接保存到HDFS,而不是首先命中本地文件系统.我目前正在尝试使用HDFS和DFS命令保存文件,但我不认为复制命令是正确的方法,因为它不是文件,而是我尝试保存时的JSON字符串.
现行守则
import urllib2
import json
import os
f = urllib2.urlopen('RESTful_API_URL.json')
json_string = json.loads(f.read().decode('utf-8'))
with open('\home\user\filename.json', 'w') as outfile:
json.dump(json_string,outfile)
Run Code Online (Sandbox Code Playgroud)
新规范
f = urllib2.urlopen('RESTful_API_URL.json')
json_string = json.loads(f.read().decode('utf-8'))
os.environ['json_string'] = json.dump(json_string)
os.system('hdfs dfs -cp -f $json_string hdfs/user/test')
Run Code Online (Sandbox Code Playgroud)
我认为问题是这个线程将数据流直接传输到hdfs而不复制.
首先,这个命令可以将stdin重定向到hdfs文件,
hadoop fs -put - /path/to/file/in/hdfs.txt
Run Code Online (Sandbox Code Playgroud)
然后,你可以在python中做到这一点,
os.system('echo "%s" | hadoop fs -put - /path/to/file/in/hdfs.txt' %(json.dump(json_string)))
Run Code Online (Sandbox Code Playgroud)