如何将瓶api中的传入文件保存到hdfs

gzjq41n4  于 2021-05-29  发布在  Hadoop
关注(0)|答案(1)|浏览(397)

我正在定义 bottle api,我需要从客户端接受一个文件,然后将该文件保存到本地系统上的hdfs。
代码看起来像这样。

@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 可以转换成 str 用一个 .read() 方法。但是 hadoopy.writetb(path, content) 希望内容是其他格式,而服务器则坚持使用该格式。它不会给出异常,也不会给出错误或任何结果。只是站在那里,好像它是在无限的循环。
有人知道如何在瓶api中将传入文件写入hdfs吗?

cuxqih21

cuxqih211#

在hadoopy文档中,它看起来像 writetb 应该是成对的可数;但是你在传递字节。
…hadoopy.writetb命令,它接受一个键/值对的迭代器。。。
你试过穿一双吗?而不是你在做什么,

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

试试这个:

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

(我不熟悉hadoop,所以我不清楚hadoop的语义是什么 path 是的,但可能对了解hdfs的人来说是有意义的。)

相关问题