使用python将json保存到hdfs

clj7thdc  于 2021-06-03  发布在  Hadoop
关注(0)|答案(3)|浏览(359)

我有一个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')
i5desfxk

i5desfxk1#

看看hdfs的put命令http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/filesystemshell.html#put
您可以使用标准in从命令行将其放入hdfs,语法如下( -put - 表示从stdin读取)。

hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile

如果可以将此命令作为python代码中的子进程启动,则应该能够将json字符串通过管道传输到子进程。

bvjveswy

bvjveswy2#

这对我的情况很有帮助:

import os
import requests

r = requests.get(url = url,headers=headers)
json_string = r.json()
os.system('echo "%s" | hadoop fs -put - /<your_hdfs_path>/json_name.json' %(json_string))
4nkexdtk

4nkexdtk3#

我认为这个问题与直接将数据流到hdfs而不复制的线程是一样的。
首先,这个命令可以将stdin重定向到hdfs文件,

hadoop fs -put - /path/to/file/in/hdfs.txt

然后,你可以用python来做,

os.system('echo "%s" | hadoop fs -put - /path/to/file/in/hdfs.txt' %(json.dump(json_string)))

相关问题