2016-07-15 31 views
9

我有一個pandas dataframeflask應用程序中作爲Flask Response對象返回。目前,我將其轉換爲JSON Object如何在RESTful Flask應用程序中將Pandas DataFrame序列化到/從ProtoBuf/Gzip中反序列化?

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

數據幀的大小確實非常大的幅度,大概是500萬X 10 ,當我反序列化的客戶端,

df = response.read_json() 

由於我的URL request parameters號碼增長,dataframe也增長。與序列化相比,反序列化時間增長爲linear factor,我想避免這種情況。例如:Serialization需要15-20秒,deserialization需要60-70秒。

有沒有一種方法可以幫助protobuf將熊貓數據框轉換爲protobuf對象。也有一種方法,我可以發送JSON作爲Gunzipped mimetype通過燒瓶?我相信在protobufgunzip之間有相似的時間和效率。

這種情況下最好的解決方案是什麼?

在此先感謝。

回答

1

最近我遇到了同樣的問題。我通過迭代DataFrame的行並在該循環中調用protobuf_obj.add()來解決此問題,並使用DataFrame中的信息。然後您可以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個月回答,我不知道有一個更好的解決方案,但肯定願意將聽一個人如果有!

相關問題