Чтение данных из Google Storage Cloud в Google Cloud Странная ошибка Datalab - PullRequest
2 голосов
/ 10 марта 2019

Я пытаюсь прочитать csv_file из Google Storage Cloud в Google Cloud Datalab точно так же, как предложено в здесь .

Я получаю сообщение об ошибке: Исходный объект gs: //analog-arbor-233411/traissn.csv не существует. (analog-arbor-233411 - это мое имя сегмента, traissn.csv - мой CSV-файл.

Итак, я проверил, что ведро действительно существует, и оно существует.

import google.datalab.storage as storage
mybucket = storage.Bucket('analog-arbor-233411')
mybucket.exists()

Здесь я даже перебираю mybucket.objects (), который дает итератор для объектов внутри корзины, чтобы убедиться, что я получаю существующий объект. Таким образом, data_csv_meta принимает только последний объект в итерации. Затем я снова проверил, существует ли он, и, конечно, он существует!

for i in mybucket.objects():
    data_csv = i
data_csv.exists()

Вот забавная вещь. Когда я запускаю следующее, я получаю сообщение об ошибке. Source object gs: //analog-arbor-233411/traissn.csv не существует (имя моего объекта в data_csv traissn.csv)

uri = data_csv.uri
%gcs read --object $uri --variable data

Пытался искать везде, но не может получить ответ.

1 Ответ

1 голос
/ 10 марта 2019

В вашем текущем коде data_csv.exists() вызывается вне цикла for, поэтому он возвращает результат только для последнего data_csv объекта, возвращенного итератором сегмента, который может быть или не быть traissn.csv.

То есть:

  • внутри цикла for добавьте оператор break, если data_csv указывает на traissn.csv, так что data_csv остается неизменным
  • сделать gcs вызов внутри цикла for
...