从GCP流(SList)读取云Jupyter实例中的pickle文件



我正在谷歌云平台存储中处理一些大数据,在GCP Vertex AI Workbench中使用Jupyterlab笔记本电脑,以避免本地存储和数据传输。

我的一些问题是通过使用gcloud管道以Linux命令行的样式运行一些有用的操作来解决的。例如:

s_path_final = 'gs://bucket_name/filename.txt'
s_pattern = 'search_target_text'
!gsutil cp {s_path_final} - | egrep -m 1 '{s_pattern}'

根据需要在文本文件中查找搜索文本的第一个出现。

不起作用的是从GCP桶中读取一个Python pickle文件流。例如,

import io
s_stream_out = !gsutil cp {GS_path_to_pickle} -
df = pd.read_pickle(io.StringIO(s_stream_out.n))

消息CCD_ 2出现错误。

s_stream_out似乎是SList类型的对象(参见。https://gist.github.com/parente/b6ee0efe141822dfa18b6feeda0a45e5)我不知道该怎么办。有没有办法适当地重新组装它?简单的解决方案,比如在上面运行字符串联接,并没有起到任何作用。

恐怕我真的不理解pickle,但我认为它是一种用于保存Python对象的序列化格式,所以在最好的情况下,所有这些的解决方案都允许在其串行结构中进行某种循环,并将项目一个接一个地直接拉回到Python内存中,而无需尝试在本地或内存中保存或重新创建整个pickle文件。

我怀疑您将需要直接使用Google客户端库。

下面是一个Python代码示例,用于将下载流式传输到一个文件|流中,以满足您的需求。

我不熟悉Jupyter|iPython,但我怀疑它的字符串列表只适用于非二进制数据。您收到的错误消息也支持这一点。

我认为您可以pickle.load,即在示例中创建的file_obj

相关内容

最新更新