Импортируйте несколько файлов CSV из Google Cloud Bucket в Datalab - PullRequest
0 голосов
/ 04 января 2019

Я пытаюсь получить приведенный ниже код для импорта нескольких файлов CSV (ALLOWANCE1.csv и ALLOWANCE2.csv) из Google Cloud Bucket в Datalab в python 2.x:

import numpy as np
import pandas as pd
from google.datalab import Context
import google.datalab.bigquery as bq
import google.datalab.storage as storage
from io import BytesIO

myBucket = storage.Bucket('Bucket Name')
object_list = myBucket.objects(prefix='ALLOWANCE')

df_list = []
for obj in object_list:
  %gcs read --object $obj.uri --variable data  
  df_list.append(pd.read_csv(BytesIO(data)))

concatenated_df = pd.concat(df_list, ignore_index=True)
concatenated_df.head()

В начале цикла for я получаю следующую ошибку:

RequestExceptionTraceback (most recent call last)
<ipython-input-5-3188aab389b8> in <module>()
----> 1 for obj in object_list:
     2   get_ipython().magic(u'gcs read --object $obj.uri --variable 
data')
     3   df_list.append(pd.read_csv(BytesIO(data)))

/usr/local/envs/py2env/lib/python2.7/site- 
packages/google/datalab/utils/_iterator.pyc in __iter__(self)
     34     """Provides iterator functionality."""
     35     while self._first_page or (self._page_token is not None):
---> 36       items, next_page_token = self._retriever(self._page_token, self._count)
 37 
 38       self._page_token = next_page_token

/usr/local/envs/py2env/lib/python2.7/site-packages/google/datalab/storage/_object.pyc in _retrieve_objects(self, page_token, _)
319                                          page_token=page_token)
320     except Exception as e:
--> 321       raise e
322 
323     objects = list_info.get('items', [])

RequestException: HTTP request failed: Not Found

Я потратил некоторое время на решение этой проблемы, но не повезло! Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 04 января 2019

Не думаю, что вы можете смешивать команды оболочки ноутбука с переменными python. Возможно, попробуйте использовать подпроцесс python lib и вызвать команды командной строки, используя python.

import numpy as np
import pandas as pd
from google.datalab import Context
import google.datalab.bigquery as bq
import google.datalab.storage as storage
from io import BytesIO

#new line
from subprocess import call  

from google.colab import auth  #new lines
auth.authenticate_user()


myBucket = storage.Bucket('Bucket Name')
object_list = myBucket.objects(prefix='ALLOWANCE')

df_list = []
for obj in object_list:

    call(['gsutil', 'cp', obj.uri, '/tmp/']) #first copy file
    filename = obj.uri.split('/')[-1] #get file name
    df_list.append(pd.read_csv('/tmp/' + filename))

concatenated_df = pd.concat(df_list, ignore_index=True)
concatenated_df.head()

обратите внимание, что я не запускал этот код, но успешно выполнил "вызов" с моими собственными файлами. Другое предложение состоит в том, чтобы сначала выполнить вызовы копирования файла за один цикл до их чтения. Таким образом, если вы многократно повторяете свои данные, вы не перезагружаете их каждый раз.

...