2016-07-15 1 views
9

flask 응용 프로그램에서 Flask Response 개체로 반환 될 pandas dataframe이 있습니다. 현재 내가, 내가로 역 직렬화 클라이언트 측에서 아마 5000000 X (10) ,RESTful Flask App에서 Panda DataFrame을 ProtoBuf/Gzip과 직렬화/역 직렬화하는 방법은 무엇입니까?

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

dataframe 크기가 크기 정말 거대하다하는 JSON Object

df = response.read_json() 

으로 그것을 변환하고 내 번호 URL request parameters이 증가하면 dataframe도 커집니다. deserialization 시간은 serialization과 비교하여 linear factor으로 증가하는데, 필자가 피하고 싶습니다. 예 : Serialization은 15-20 초, deserialization은 60-70 초 걸립니다.

protobuf이 pandas 데이터 프레임을 protobuf 개체로 변환하는 데 도움이 될 수있는 방법이 있습니까? 또한 JSON을 플라스크를 통해 Gunzipped mimetype으로 보낼 수있는 방법이 있습니까? protobufgunzip 사이에는 비슷한시기와 효율성이 있다고 생각합니다.

그런 시나리오에서 가장 좋은 솔루션은 무엇입니까?

미리 감사드립니다.

답변

1

최근에 같은 문제가 발생했습니다. 필자는 DataFrame의 행을 반복하고 DataFrame의 정보를 사용하여 해당 루프에서 protobuf_obj.add()를 호출하여 문제를 해결했습니다. 그런 다음 직렬화 된 문자열 출력을 GZIP 할 수 있습니다. 의 라인을 따라

즉 뭔가 :이 질문에 9개월에 답하지 않았 음을

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

을 감안할 때, 나는 더 나은 솔루션 만있을 경우 하나의 청각에 확실히 개방이 확실하지 않다!