2016-07-15 13 views
9

मेरे पास flask एप्लिकेशन में Flask Response ऑब्जेक्ट के रूप में वापस आने के लिए pandas dataframe है। वर्तमान में मैं, एक JSON Object करने के लिए इसे परिवर्तित कर रहा हूँ,एक रीस्टफुल फ्लास्क ऐप में प्रोटोबुफ/गीज़िप से और उसके लिए पांडस डेटाफ्रेम को क्रमबद्ध/deserialize कैसे करें?

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

dataframe आकार परिमाण के वास्तव में बहुत बड़ा है, शायद 5000000 एक्स 10 ग्राहक के पक्ष जब मैं के रूप में यह deserialize पर

df = response.read_json() 

के रूप में URL request parameters की संख्या बढ़ती है, dataframe भी बढ़ता है। सीरियलाइजेशन की तुलना में Deserialization समय linear factor पर बढ़ता है, जिसे मैं टालना चाहता हूं। उदाहरण: Serialization में 15-20 सेकंड लगते हैं, deserialization 60-70 सेकंड लेता है।

क्या कोई तरीका है कि protobuf इस मामले में पांडा डेटाफ्रेम को प्रोटोबफ ऑब्जेक्ट में कनवर्ट करने में मदद कर सकता है। यह भी एक तरीका है कि मैं JSON को Gunzipped फ्लास्क के माध्यम से मिमटाइप भेज सकता हूं? मेरा मानना ​​है कि protobuf और gunzip के बीच तुलनात्मक समय और दक्षता है।

ऐसे परिदृश्य में सबसे अच्छा समाधान क्या है?

अग्रिम धन्यवाद।

उत्तर

1

मैं हाल ही में एक ही समस्या में भाग गया। मैंने डेटाफ्रेम से जानकारी का उपयोग करके, उस डेटा लूप में मेरी डेटाफ्रेम की पंक्तियों के माध्यम से इसे घुमाकर और protopuf_obj.add() को कॉल करके हल किया। फिर आप serialized स्ट्रिंग आउटपुट 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 महीनों में उत्तर नहीं दिया गया है, मैं वहाँ एक बेहतर समाधान लेकिन निश्चित रूप से एक सुनवाई है, अगर वहाँ के लिए खुला है यकीन नहीं है!

संबंधित मुद्दे