我正在尝试通过服务器(Rpyc)将大熊猫数据帧写入Hdf5。数据帧是从客户端发送的。 我发现,在将对象附加到Hdf5Store之前,应该使用rpyc.classic.obtain()释放对象。如果我不解雇,大熊猫会抛出一个错误,因为它是netref对象。
对于较小的数据帧,解串速度更快,但是,当数据帧大小很大时,解串和附加将花费大量时间。是否可以解决此问题?
还是我应该使用其他方法?我在下面附加了一个最小的示例:
环境 rpyc 4.0.2 熊猫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)