如何解决合并两个大数据帧时出现内存错误
我需要一些帮助。
主要问题是计算两点之间的距离及其纬度和经度。我们将巴西划分为 33k 个六边形,列在下面的数据框中:
我一直在尝试将此数据框与其副本合并,因此我将拥有一个包含这些六边形的所有组合的 10 亿行数据框,并使用此函数计算它们之间的距离:
def get_distance(lat_1,lng_1,lat_2,lng_2):
d_lat = lat_2 - lat_1
d_lng = lng_2 - lng_1
temp = (
np.sin(d_lat / 2) ** 2
+ np.cos(lat_1)
* np.cos(lat_2)
* np.sin(d_lng / 2) ** 2
)
#print('a')
return 6373.0 * (2 * np.arctan2(np.sqrt(temp),np.sqrt(1 - temp))) * 1.4 * 1000
我尝试将它们与 Pandas 合并,但出现内存错误(需要 8GB),因此我使用 Vaex 库将数据转换为 hdf5 文件。但是,当我尝试将它们与此代码合并时,我得到了同样的错误。
with h5py.File('mergedfs','w') as hdf:
hdf.create_dataset('datasetmerge',data = dvv.join(dvv2,left_on='key',right_on='key2',how='left',allow_duplication=True))
有没有人经历过这样的事情?我提前感谢您的帮助。
另外,如果您有任何替代解决方案,我很高兴听到!
解决方法
如果没有用于您的数据集的 dytpe,我无法编写准确的解决方案。但是,当我查看您的代码和文件图像时,我可以猜测伪代码应该是什么样子。见下文。我为您的 HDF5 文件和数据集使用了假名。我使用图像中显示的列/字段名称作为纬度和经度数据。这只是循环,调用 get_distance()
来计算距离并将值返回为 dist_i_j
。注意:我按原样调用您的函数 get_distance()
。希望这会让你开始。或者,如果您可以提供有关 dtype(或一些示例数据)的更多信息,我可以微调代码。祝你好运!
with h5py.File('not_mergedfs','w') as hdf:
data=h5f['ds_name']
for i in range (32882):
lat_1 = data[i]['lat']
lng_1 = data[i]['lon']
for j in range (i+1,32882):
lat_2 = data[j]['lat']
lng_2 = data[j]['lon']
dist_i_j = get_distance(lat_1,lng_1,lat_2,lng_2)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。