【问题标题】:How to serialize/deserialize Pandas DataFrame to and from ProtoBuf/Gzip in a RESTful Flask App?如何在 RESTful Flask 应用程序中序列化/反序列化 Pandas DataFrame 到 ProtoBuf/Gzip?
【发布时间】:2016-11-18 04:26:53
【问题描述】:

我有一个 pandas dataframeflask 应用程序中作为Flask Response 对象返回。目前我正在将其转换为JSON Object

df = df.to_json()
return Response(df, status=200, mimetype='application/json') 

数据框的大小非常大,可能是 5000000 X 10。 在客户端,当我将其反序列化为时,

df = response.read_json()

随着URL request parameters 数量的增长,dataframe 的数量也在增长。与序列化相比,反序列化时间以linear factor 增长,这是我想避免的。例如:Serialization 需要 15-20 秒,deserialization 需要 60-70 秒。

在这种情况下,protobuf 是否可以帮助将 pandas 数据帧转换为 protobuf 对象。还有一种方法可以通过烧瓶将JSON 作为Gunzipped mimetype 发送吗?我相信protobufgunzip 之间的时间和效率相当。

在这种情况下最好的解决方案是什么?

提前致谢。

【问题讨论】:

    标签: python json serialization gzip protocol-buffers


    【解决方案1】:

    我最近遇到了同样的问题。我通过遍历我的 DataFrame 的行并使用来自 DataFrame 的信息在该循环中调用 protobuf_obj.add() 来解决它。然后,您可以 GZIP 序列化的字符串输出。

    即类似于:

    for _, row in df.iterrows():
        protobuf_obj.add(val1=row[col1], val2=row[col2])
    proto_str = protobuf_obj.SerializeToString()
    return gzip.compress(proto_str)
    

    鉴于这个问题在 9 个月内没有得到解答,我不确定是否有更好的解决方案,但如果有的话,肯定愿意听取!

    【讨论】:

      猜你喜欢
      • 2012-04-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多