我有一個很大的CSV文件,大小爲1 GB,並且想要在數據存儲中創建實體,每行一個實體。將雲存儲中的大型CSV導入到App Engine數據存儲中
該CSV文件當前位於Google雲端存儲中。有沒有一種乾淨的方式來做到這一點?我可以在網上找到的所有例子似乎都依賴於本地的CSV文件,或者看起來不像它們可以很好地擴展。理想情況下,有一個流式API可以讓我從Cloud Storage中讀取足夠小的部分來更新對Datastore的調用,但我一直無法找到類似的東西。
我有一個很大的CSV文件,大小爲1 GB,並且想要在數據存儲中創建實體,每行一個實體。將雲存儲中的大型CSV導入到App Engine數據存儲中
該CSV文件當前位於Google雲端存儲中。有沒有一種乾淨的方式來做到這一點?我可以在網上找到的所有例子似乎都依賴於本地的CSV文件,或者看起來不像它們可以很好地擴展。理想情況下,有一個流式API可以讓我從Cloud Storage中讀取足夠小的部分來更新對Datastore的調用,但我一直無法找到類似的東西。
你最好的選擇將是使用CloudStorageInputReader一個MapReduce工作:https://github.com/GoogleCloudPlatform/appengine-mapreduce/blob/master/python/src/mapreduce/input_readers.py#L2189
更多的MapReduce的蟒蛇在這裏:https://github.com/GoogleCloudPlatform/appengine-mapreduce/wiki/3-MapReduce-for-Python
當你打開一個GCS文件是流緩衝您收到的緩衝區,可以醃製。但是GCS不支持迭代器協議來讀取CSV的行。你必須write your own wrapper。像:
with gcs.open('/app_default_bucket/csv/example.csv', 'r') as f:
csv_reader = csv.reader(iter(f.readline, ''))
for row in csv_reader:
logging.info(' - '.join(row))
如果你是Blob存儲區familiair,你可以用它來使用blobstore.create_gs_key("/gs" + <gcs_file_name_here>)
從GCS讀取大型CSV的。 示例here