Я пытаюсь записать огромный кадр данных панд в 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)