2017-09-08 54 views
0

我正在定义bottle api,我需要从客户端接受文件,然后将该文件保存到本地系统上的HDFS。如何将传入的文件保存在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.filecStringIO.StringO类型可被转化为str.read()方法的对象。但hadoopy.writetb(path, content)预计内容是其他格式,服务器坚持在这一点上。它不会例外,它不会给出错误或任何结果。就像它在无限循环中一样站在那里。

有谁知道如何将输入文件写入HDFS的瓶子API?

+0

那么,你是否改写了WebHDFS,基本上? –

+0

不,我只想写瓶apis,其中之一是文件上传和读取和HDFS。 –

回答

0

hadoopy documentation,它看起来像writetb的第二个参数应该是一对迭代;但你传递的是字节。

...的hadoopy.writetb命令这需要键/值对的迭代器...

您是否尝试过通过一对?而不是你在做什么,

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

试试这个:

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

(我不熟悉使用Hadoop,所以它不是很清楚,我什么path的语义,但据推测它”对于知道HDFS的人来说是有道理的。)

+0

路径只是任何文件系统路径字符串 –

+0

是的。 Path只是一个像'hdfs:// localhost:8082/root/data/files/foo'这样的字符串,但事情是'upload.file.read()'给出'writetb'不接受的字符串! –

+0

@KeyurGolani您是否阅读过'writetb'的API?第二个参数应该是一个元组,而不是一个字符串。我编辑了我的答案,使其更清晰。让我知道它是否有效。 –

相关问题