Tec*_*Guy 5 nio google-cloud-storage google-cloud-platform
我是 Google Cloud Platform 的新手。我正在尝试逐行读取 Google Cloud Storage(通过服务帐户密钥访问的非公共存储桶)中的 CSV 文件,大约 1GB。
我找不到任何选项来逐行读取 Google Cloud Storage (GCS) 中存在的文件。我只看到块大小/字节大小选项的读取。由于我正在尝试读取 CSV,因此我不想使用按块大小读取,因为它可能会在读取时拆分记录。
迄今为止 尝试过的解决方案:尝试将 GCS 中存在的 CSV 文件中的内容复制到临时本地文件并使用以下代码读取临时文件。下面的代码按预期工作,但我不想将大文件复制到我的本地实例。相反,我想从 GCS 逐行读取。
StorageOptions options =
StorageOptions.newBuilder().setProjectId(GCP_PROJECT_ID)
.setCredentials(gcsConfig.getCredentials()).build();
Storage storage = options.getService();
Blob blob = storage.get(BUCKET_NAME, FILE_NAME);
ReadChannel readChannel = blob.reader();
FileOutputStream fileOuputStream = new FileOutputStream(TEMP_FILE_NAME);
fileOuputStream.getChannel().transferFrom(readChannel, 0, Long.MAX_VALUE);
fileOuputStream.close();
Run Code Online (Sandbox Code Playgroud)
请建议方法。
因为我正在进行批处理,所以我在 ItemReader 的 init() 方法中使用以下代码,该方法用 @PostConstruct 注释。在我的 ItemReader 的 read() 中,我正在构建一个列表。列表的大小与块的大小相同。通过这种方式,我可以根据 chunkSize 读取行,而不是一次读取所有行。
StorageOptions options =
StorageOptions.newBuilder().setProjectId(GCP_PROJECT_ID)
.setCredentials(gcsConfig.getCredentials()).build();
Storage storage = options.getService();
Blob blob = storage.get(BUCKET_NAME, FILE_NAME);
ReadChannel readChannel = blob.reader();
BufferedReader br = new BufferedReader(Channels.newReader(readChannel, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5437 次 |
| 最近记录: |