我有一个python脚本,它当前访问一个返回json的api。然后它获取json字符串并将其保存为本地文件系统上的一个文件,然后手动将其移动到hdfs中。我想改变这一点,使我的python脚本直接保存到hdfs,而不是先访问本地文件系统。我目前正在尝试使用hdfs和dfs命令保存文件,但我不认为copy命令是正确的方法,因为当我尝试保存它时,它不是一个文件而是一个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)
新代码
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')
3条答案
按热度按时间i5desfxk1#
看看hdfs的put命令http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/filesystemshell.html#put
您可以使用标准in从命令行将其放入hdfs,语法如下(
-put -
表示从stdin读取)。如果可以将此命令作为python代码中的子进程启动,则应该能够将json字符串通过管道传输到子进程。
bvjveswy2#
这对我的情况很有帮助:
4nkexdtk3#
我认为这个问题与直接将数据流到hdfs而不复制的线程是一样的。
首先,这个命令可以将stdin重定向到hdfs文件,
然后,你可以用python来做,