我有一个大的1 GB的大型CSV文件,并希望在数据存储区中创建实体,每行一个实体。
该CSV文件目前位于Google云端存储中。有干净的方法吗?我在网上找到的所有示例似乎都依赖于在本地使用CSV文件,或者看起来不会很好地扩展。理想情况下,有一个流媒体API可以让我从云存储中读取足够小的部分来对数据存储区进行更新调用,但我还没有找到类似的东西。
答案 0 :(得分:2)
打开GCS文件时收到的缓冲区是一个流缓冲区,可以进行pickle。但是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))
如果您是blobstore的家庭成员,可以使用它来使用blobstore.create_gs_key( "/gs" + <gcs_file_name_here>)
从GCS读取大型CSV。
示例here
答案 1 :(得分:1)
您最好的选择是使用CloudStorageInputReader进行mapreduce工作:https://github.com/GoogleCloudPlatform/appengine-mapreduce/blob/master/python/src/mapreduce/input_readers.py#L2189
有关python mapreduce的更多内容:https://github.com/GoogleCloudPlatform/appengine-mapreduce/wiki/3-MapReduce-for-Python