Доступ к файлу bz2 в S3 из записной книжки Sagemaker

#amazon-web-services #amazon-s3 #amazon-sagemaker

#amazon-веб-сервисы #amazon-s3 #amazon-sagemaker

Вопрос:

Я могу читать и записывать csv-файлы из корзины S3 и в нее из записной книжки Sagemaker, но при попытке прочитать файл bz2, используя метод path, используемый в файлах csv, я получаю сообщение об ошибке отсутствия файла или каталога

 IOErrorTraceback (most recent call last)
<ipython-input-19-d14d47a702e1> in <module>()
      2 # Create corpus
      3 #%time wiki = WikiCorpus("resources/articles1.xml.bz2", tokenizer_func=spacy_tokenize)
----> 4 wiki = WikiCorpus("s3://sagemakerq/enwiki.xml.bz2", tokenizer_func=spacy_tokenize)

/home/ec2-user/anaconda3/envs/amazonei_mxnet_p27/lib/python2.7/site-packages/gensim/corpora/wikicorpus.pyc in __init__(self, fname, processes, lemmatize, dictionary, filter_namespaces, tokenizer_func, article_min_tokens, token_min_len, token_max_len, lower, filter_articles)
    634 
    635         if dictionary is None:
--> 636             self.dictionary = Dictionary(self.get_texts())
    637         else:
    638             self.dictionary = dictionary

/home/ec2-user/anaconda3/envs/amazonei_mxnet_p27/lib/python2.7/site-packages/gensim/corpora/dictionary.pyc in __init__(self, documents, prune_at)
     82 
     83         if documents is not None:
---> 84             self.add_documents(documents, prune_at=prune_at)
     85 
     86     def __getitem__(self, tokenid):

/home/ec2-user/anaconda3/envs/amazonei_mxnet_p27/lib/python2.7/site-packages/gensim/corpora/dictionary.pyc in add_documents(self, documents, prune_at)
    195 
    196         """
--> 197         for docno, document in enumerate(documents):
    198             # log progress amp; run a regular check for pruning, once every 10k docs
    199             if docno % 10000 == 0:

/home/ec2-user/anaconda3/envs/amazonei_mxnet_p27/lib/python2.7/site-packages/gensim/corpora/wikicorpus.pyc in get_texts(self)
    676             ((text, self.lemmatize, title, pageid, tokenization_params)
    677              for title, text, pageid
--> 678              in extract_pages(bz2.BZ2File(self.fname), self.filter_namespaces, self.filter_articles))
    679         pool = multiprocessing.Pool(self.processes, init_to_ignore_interrupt)
    680 

IOError: [Errno 2] No such file or directory: 's3://sagemakerq/enwiki.xml.bz2'
  

Ответ №1:

Похоже, вы используете gensim пакет Python для создания корпуса из дампа базы данных на основе wiki из S3. Пакет не поддерживает чтение непосредственно из S3. Вместо этого вы можете загрузить файл и работать с ним.

 import boto3
from gensim.corpora.wikicorpus import WikiCorpus

s3 = boto3.client('s3')
s3.download_file('BUCKET_NAME', 'OBJECT_NAME', 'FILE_NAME')
wiki = WikiCorpus('FILE_NAME')