Загрузить данные Pandas в виде объекта JSON в облачном хранилище - PullRequest
0 голосов
/ 07 мая 2019

Я пытался загрузить фрейм данных Pandas в объект JSON в облачном хранилище, используя облачную функцию.Follwing - мой код -

def upload_blob(bucket_name, source_file_name, destination_blob_name):
"""Uploads a file to the bucket."""
    storage_client = storage.Client()
   bucket = storage_client.get_bucket(bucket_name)
   blob = bucket.blob(destination_blob_name)

   blob.upload_from_file(source_file_name)

   print('File {} uploaded to {}.'.format(
    source_file_name,
    destination_blob_name))

final_file = pd.concat([df, df_second], axis=0)
final_file.to_json('/tmp/abc.json')
with open('/tmp/abc.json', 'r') as file_obj:
   upload_blob('test-bucket',file_obj,'abc.json') 

Я получаю следующую ошибку в строке - blob.upload_from_file (source_file_name)

Deployment failure:
Function failed on loading user code. Error message: Code in file main.py 
can't be loaded.
Detailed stack trace: Traceback (most recent call last):
File "/env/local/lib/python3.7/site- 
packages/google/cloud/functions/worker.py", line 305, in 
check_or_load_user_function
_function_handler.load_user_function()
File "/env/local/lib/python3.7/site- 
packages/google/cloud/functions/worker.py", line 184, in load_user_function
spec.loader.exec_module(main)
File "<frozen importlib._bootstrap_external>", line 728, in exec_module
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
File "/user_code/main.py", line 6, in <module>
import datalab.storage as gcs
File "/env/local/lib/python3.7/site-packages/datalab/storage/__init__.py", 
line 16, in <module>
from ._bucket import Bucket, Buckets
File "/env/local/lib/python3.7/site-packages/datalab/storage/_bucket.py", 
line 21, in <module>
import datalab.context
File "/env/local/lib/python3.7/site-packages/datalab/context/__init__.py", 
line 15, in <module>
from ._context import Context
File "/env/local/lib/python3.7/site-packages/datalab/context/_context.py", 
line 20, in <module>
from . import _project
File "/env/local/lib/python3.7/site-packages/datalab/context/_project.py", 
line 18, in <module>
import datalab.utils
File "/env/local/lib/python3.7/site-packages/datalab/utils/__init__.py", 
line 15
from ._async import async, async_function, async_method
                        ^
SyntaxError: invalid syntax

Что, возможно, является ошибкой?

Ответы [ 2 ]

0 голосов
/ 08 мая 2019

Вы передаете строку в blob.upload_from_file () , но этот метод требует объект файла. Вы, вероятно, хотите использовать blob.upload_from_filename () . Проверьте образец в документах GCP .

В качестве альтернативы, вы можете получить объект файла и продолжать использовать blob.upload_from_file (), но это лишние лишние строки.

with open('/tmp/abc.json', 'r') as file_obj:
    upload_blob('test-bucket', file_obj, 'abc.json') 
0 голосов
/ 07 мая 2019

Используйте объект корзины вместо строки

что-то вроде upload_blob(conn.get_bucket(mybucket),'/tmp/abc.json','abc.json')}

...