Очень медленный рассол на пандах Data Frame RPYC - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь записать огромный кадр данных панд в Hdf5 через сервер (Rpyc).Кадр данных отправляется от клиента.Я понял, что я должен использовать rpyc.classic.obtain (), чтобы распаковать мой объект, прежде чем добавить его в Hdf5Store.Если я не распаковываю, pandas выдает ошибку, так как это объект netref.

Для меньшего фрейма данных распаковка происходит быстрее, но когда размер фрейма данных огромен, потребуется много времени дляраспаковать его и добавить.Есть ли способ обойти эту проблему?

Или есть какой-то другой метод, который мне следует использовать?Ниже я привел минимальный пример:

Среда rpyc 4.0.2 pandas 0.24.2 python 3.7.3 Windows

Минимальный пример

Сервер:

import logging
import rpyc

class DummyServer(rpyc.Service):

    def on_connect(self,conn):
        print("Starting Server")
        pass

    def on_disconnect(self,conn):
        pass

    def exposed_write_data(self,dataframe):
        data = pd.HDFStore("Test.h5")
        start = time.time()
        realdata = rpyc.classic.obtain(dataframe)
        end = time.time()
        print(end-start)
        data.append("DATA",realdata)
        print("Writing Data Completed")
        data.close()


if __name__ == "__main__":
    t = ThreadedServer(DummyServer(), port=18860,protocol_config = 
    rpyc.core.protocol.DEFAULT_CONFIG)
    t.start()

Клиент:

import rpyc
import pandas as pd
rpyc.core.protocol.DEFAULT_CONFIG['allow_pickle'] = True

conn = rpyc.connect("localhost",18860, config=rpyc.core.protocol.DEFAULT_CONFIG)
server = conn.root

import datetime
import pandas as pd
import numpy as np

N = 10000
M = 10000

todays_date = datetime.datetime.now().date()
index = pd.date_range(todays_date-datetime.timedelta(N), periods=N, freq='D')
columns = [str(x) for x in range(M)]
data = np.array([np.arange(N)]*M).T
df = pd.DataFrame(data, index=index, columns=columns)

server.write_data(df)
...