0

我正在定义bottle需要从客户端接受文件然后将该文件保存到本地系统上的 HDFS 的 api。

代码看起来像这样。

@route('/upload', method='POST')
def do_upload():
    import pdb; pdb.set_trace()
    upload = request.files.upload
    name, ext = os.path.splitext(upload.filename)

    save_path = "/data/{user}/{filename}".format(user=USER, filename=name)

    hadoopy.writetb(save_path, upload.file.read())
    return "File successfully saved to '{0}'.".format(save_path)

问题是,它request.files.upload.file是一个类型的对象cStringIO.StringO,可以通过方法转换为stra .read()。但是hadoopy.writetb(path, content)期望内容是其他格式,并且服务器坚持这一点。它不会给出异常,也不会给出错误或任何结果。只是站在那里,好像它处于无限循环中。

有谁知道如何将瓶子 api 中的传入文件写入 HDFS?

4

1 回答 1

0

hadoopy 文档中,看起来第二个参数 towritetb应该是一对可迭代的;但你传递的是字节。

... hadoopy.writetb 命令采用键/值对的迭代器...

你试过传递一对吗?而不是你在做什么,

hadoopy.writetb(save_path, upload.file.read())  # 2nd param is wrong

尝试这个:

hadoopy.writetb(save_path, (path, upload.file.read()))

(我不熟悉 Hadoop,所以我不清楚它的语义path是什么,但大概对了解 HDFS 的人来说是有意义的。)

于 2017-09-10T17:15:16.777 回答