作者热门文章
- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我正在尝试使用 python as 从 hdfds 读取文件
from hdfs.client import Client
import json,requests
if __name__ == '__main__':
cl = Client("http://hostName:port")
print cl.list("/myDir/")
with cl.read("/myDir/myFile.json") as f:
print f
print json.load(f)
但是我明白了
raise ValueError("No JSON object could be decoded")
ValueError: No JSON object could be decoded
关于 json.load(f)
我也试过
with cl.read("/myDir/myFile.json", encoding ="utf-8") as f:
但现在我明白了
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8b in position 1: invalid start byte
然后我试了一下
with cl.read("/myDir/myFile.json",encoding ="utf-8", errors='ignore') as f:
但是我明白了
TypeError: read() got an unexpected keyword argument 'errors'
有什么方法可以将文件作为简单的字符串读入吗?该文件看起来像
{"key1":"val1","key2":"val2","key3":"val3"...}
我正在使用 python 2.7
更新
感谢@Yaron 提供的有用建议。经过一番摆弄,我想出了这个
r=requests.get('http://hostName:port/webhdfs/v1/myDir/myFile.json?op=OPEN', stream=True)
r.raw.decode_content = True
print r
print str(r.raw.read())
然而,出于某种原因,它并没有读取整个文件。它有点停在中间,我不知道为什么。有什么想法吗?
另外,我仍然无法将其转换为 JSON。我试过了
r=requests.get('http://hostName:port/webhdfs/v1/myDir/myFile.json?op=OPEN', stream=True)
r.raw.decode_content = True
print r
x=r.raw.read()
# print x["key1"] fails citing that string indices must be integers
print x
x=json.loads(str(x))
我明白了
UnicodeDecodeError: 'utf8' codec can't decode byte 0xb0 in position 0: invalid start byte
回到方 block 1!
终于明白了
我所要做的就是
r=requests.get('http://hostName:port/webhdfs/v1/myDir/myFile.json?op=OPEN', stream=True)
r.raw.decode_content = True
print r
x=r.raw.read().decode("utf-8",errors="ignore")
print json.loads(x)["key1"]
这给了我
<Response [200]>
value2
:)
最佳答案
1) 参见 pypi.python.org/pypi/hdfs - 我会逐步遵循他们的示例(这看起来与您所做的非常相似) - 并确保问题不在 python 代码中。 2) 下一步是确认 /myDir/myFile.json
确实存在于 HDFS 中,并持有一个有效的 json 文件。
stackoverflow.com/a/16924225/5088142 - 说明您可以使用 object.raw.read(10)
读取 requests.packages.urllib3.response.HTTPResponse
对象 - 例如f.raw.read(10)
关于Python HDFS : Cannot read file,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37117227/
我是一名优秀的程序员,十分优秀!