我有一个很大的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