使用 boto 加载文件的更好方法是什么? (获取文件名太长错误)
What's a better way to load a file using boto? (getting filename too long error)
所以我正在尝试使用 tf.contrib.learn.preprocessing.VocabularyProcessor.restore()
从 S3 存储桶中恢复词汇文件。首先,我尝试获取要在 .restore()
中使用的存储桶的路径名,但我一直收到“对象不存在”错误。后来,经过进一步研究,我找到了一种人们用来加载文本文件和JSON文件的方法,并在此处应用相同的方法:
obj = s3.Object(BUCKET_NAME, KEY).get()['Body'].read()
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor.restore(obj)
这工作了一段时间,直到文件内容增加并最终出现 'File name too long' 错误。有没有更好的方法从 S3 存储桶加载和恢复文件?
顺便说一句,我在我的机器上进行了本地测试,它工作得很好,因为它只需要获取文件的路径,而不是文件的全部内容。
您似乎将文件的实际内容作为文件名传递?
我认为您需要将对象从 S3 下载到 tmp 文件并将该文件的路径传递到恢复中。
试试这里的方法:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Object.download_file
更新:
我在这里查看了代码:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/preprocessing/text.py 看起来这只是保存了一个 pickle,因此您可以真正轻松地导入 pickle 并调用以下命令:
import pickle
obj = s3.Object(BUCKET_NAME, KEY).get()['Body']
vocab_processor = pickle.loads(obj.read())
希望有用吗?
所以我正在尝试使用 tf.contrib.learn.preprocessing.VocabularyProcessor.restore()
从 S3 存储桶中恢复词汇文件。首先,我尝试获取要在 .restore()
中使用的存储桶的路径名,但我一直收到“对象不存在”错误。后来,经过进一步研究,我找到了一种人们用来加载文本文件和JSON文件的方法,并在此处应用相同的方法:
obj = s3.Object(BUCKET_NAME, KEY).get()['Body'].read()
vocab_processor = tf.contrib.learn.preprocessing.VocabularyProcessor.restore(obj)
这工作了一段时间,直到文件内容增加并最终出现 'File name too long' 错误。有没有更好的方法从 S3 存储桶加载和恢复文件?
顺便说一句,我在我的机器上进行了本地测试,它工作得很好,因为它只需要获取文件的路径,而不是文件的全部内容。
您似乎将文件的实际内容作为文件名传递?
我认为您需要将对象从 S3 下载到 tmp 文件并将该文件的路径传递到恢复中。
试试这里的方法:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#S3.Object.download_file
更新: 我在这里查看了代码:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/contrib/learn/python/learn/preprocessing/text.py 看起来这只是保存了一个 pickle,因此您可以真正轻松地导入 pickle 并调用以下命令:
import pickle
obj = s3.Object(BUCKET_NAME, KEY).get()['Body']
vocab_processor = pickle.loads(obj.read())
希望有用吗?