Записные книжки, запланированные Vertex AI, не распознают наличие папок

У меня есть управляемый блокнот Jupyter в Vertex AI, который я хочу запланировать. Ноутбук работает нормально, пока я запускаю его вручную, но как только он запланирован, он терпит неудачу. На самом деле есть много вещей, которые идут не так, как запланировано, и некоторые из них можно исправить. Прежде чем объяснить, в чем моя проблема, позвольте мне сначала дать некоторые детали контекста.

Записная книжка собирает информацию из API для нескольких хранилищ и сохраняет данные в разных папках перед их обработкой, сохраняя CSV-файлы в папках для конкретных хранилищ и в bigquery. Итак, в расположении блокнота у меня есть:

  • Записная книжка
  • Функции, необходимые для обработки данных (в виде файлов *.py)
  • Ряд папок, некоторые из которых имеют вложенные папки, в которых также есть вложенные папки.

enter image description here

Когда я выполняю это вручную, никаких проблем. Все работает хорошо и все файлы оказываются именно там, где должны, а также в разных таблицах bigQuery.

Однако при планировании выполнения блокнота все идет не так. Во-первых, файлы *.py не читаются (как import). Нет проблем, я добавил функции в блокнот.

Теперь я теряюсь из-за следующей ошибки, потому что понятия не имею, почему она работает или как ее исправить. Код, который приводит к ошибке, следующий:

internal = "https://api.************************"

df_descriptions = [] 

storess = internal
response_stores = requests.get(storess,auth = HTTPBasicAuth(userInternal, keyInternal))
pathlib.Path("stores/request_1.json").write_bytes(response_stores.content)

filepath = "stores"

files = os.listdir(filepath)

for file in files:
    with open(filepath + "/"+file) as json_string:
        jsonstr = json.load(json_string)
        information = pd.json_normalize(jsonstr)
    df_descriptions.append(information)

StoreINFO = pd.concat(df_descriptions)
StoreINFO = StoreINFO.dropna()
StoreINFO = StoreINFO[StoreINFO['storeIdMappings'].map(lambda d: len(d)) > 0]

cloud_store_ids = list(set(StoreINFO.cloudStoreId))

LastWeek = datetime.date.today()- timedelta(days=2)
LastWeek =np.datetime64(LastWeek)

и сообщение об ошибке:

FileNotFoundError                         Traceback (most recent call last)
/tmp/ipykernel_165/2970402631.py in <module>
      5 storess = internal
      6 response_stores = requests.get(storess,auth = HTTPBasicAuth(userInternal, keyInternal))
----> 7 pathlib.Path("stores/request_1.json").write_bytes(response_stores.content)
      8 
      9 filepath = "stores"

/opt/conda/lib/python3.7/pathlib.py in write_bytes(self, data)
   1228         # type-check for the buffer interface before truncating the file
   1229         view = memoryview(data)
-> 1230         with self.open(mode='wb') as f:
   1231             return f.write(view)
   1232 

/opt/conda/lib/python3.7/pathlib.py in open(self, mode, buffering, encoding, errors, newline)
   1206             self._raise_closed()
   1207         return io.open(self, mode, buffering, encoding, errors, newline,
-> 1208                        opener=self._opener)
   1209 
   1210     def read_bytes(self):

/opt/conda/lib/python3.7/pathlib.py in _opener(self, name, flags, mode)
   1061     def _opener(self, name, flags, mode=0o666):
   1062         # A stub for the opener argument to built-in open()
-> 1063         return self._accessor.open(self, flags, mode)
   1064 
   1065     def _raw_open(self, flags, mode=0o777):

FileNotFoundError: [Errno 2] No such file or directory: 'stores/request_1.json'

Я бы с удовольствием нашел другой способ сделать это, например, используя корзины GCS, но моя проблема заключается в существовании подпапок. Есть много магазинов, и я не хочу выполнять эту операцию вручную, потому что у некоторых розничных продавцов, для которых я это делаю, более 1000 магазинов. Мой код Python генерирует все эти папки, и, насколько я понимаю, это невозможно в GCS.

Как я могу решить эту проблему?

Не могли бы вы попробовать использовать абсолютный путь (начиная с "/" - не относительный) или создать "магазины" каталог (с "mkdir")? Дайте мне знать, если это будет полезно.

Shipra Sarkar 29.04.2022 15:50

Привет @Serge de Gosson de Varennes, твоя проблема решена?

Shipra Sarkar 01.05.2022 08:20

Да. Это. Опубликуйте свой ответ, и я проголосую за него. Большое спасибо.

Serge de Gosson de Varennes 01.05.2022 11:48
3 метода стилизации элементов HTML
3 метода стилизации элементов HTML
Когда дело доходит до применения какого-либо стиля к нашему HTML, существует три подхода: встроенный, внутренний и внешний. Предпочтительным обычно...
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
0
3
89
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

GCS использует плоское пространство имен, поэтому папки на самом деле не существуют, но могут быть смоделированы, как указано в этом документация. Для вашего требования вы можете либо использовать абсолютный путь (начиная с «/», а не относительный), либо создать «магазины " каталог (с "mkdir"). Для получения дополнительной информации вы можете проверить этот блог.

Другие вопросы по теме