使用 python 将 JSON 保存到 HDFS
Save JSON to HDFS using python
我有一个 python 脚本,它当前访问一个 API,其中 returns JSON。然后它获取 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)
新代码
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')
查看 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#put
中的 HDFS put 命令
您可以使用标准输入从命令行输入 HDFS,语法如下(-put -
表示从标准输入读取)。
hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile
如果您可以在 python 代码中将此命令作为子进程启动,您应该能够将 json 字符串通过管道传输到子进程。
我认为问题与此线程相同Stream data into hdfs directly without copying。
首先,这个命令可以将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)))
它对我的情况有帮助:
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))
我有一个 python 脚本,它当前访问一个 API,其中 returns JSON。然后它获取 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)
新代码
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')
查看 http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/FileSystemShell.html#put
中的 HDFS put 命令您可以使用标准输入从命令行输入 HDFS,语法如下(-put -
表示从标准输入读取)。
hadoop fs -put - hdfs://nn.example.com/hadoop/hadoopfile
如果您可以在 python 代码中将此命令作为子进程启动,您应该能够将 json 字符串通过管道传输到子进程。
我认为问题与此线程相同Stream data into hdfs directly without copying。
首先,这个命令可以将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)))
它对我的情况有帮助:
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))