我希望从一个庞大的集合中提取数据,该集合的大小为1.4 TB,以HDF 5格式存储。这些数据来源于NREL,可以在Amazon S3存储桶上公开找到here。
工作流程:
我目前使用h5 py和fspec建立了一个到这个文件的链接,隔离了一个数据集/子集'clearsky_ghi'
,使用一个域来隔离元数据中的相关点,然后根据特定的时间范围进一步隔离要提取的索引。相关代码如下:
验证码:
import os, sys, re, ast, time, fsspec, h5py, s3fs
import numpy as np
import pandas as pd
awsurl = 'https://nrel-pds-nsrdb.s3.amazonaws.com/v3/nsrdb_2019.h5'
bounds = [-130.1229448, 20.1788443, -60.8598418, 52.8170218]
with h5py.File(fsspec.open(awsurl, "rb").open(), "r") as awsfile:
dataset = awsfile[datatype]
meta = pd.DataFrame(awsfile['meta'][...])
times = pd.to_datetime(awsfile['time_index'][...].astype(str))
duologic = np.logical_and.reduce((times.month == 12, times.day== 1, times.minute == 0))
timeindex = list(np.where(duologic)[0])
coords = awsfile['coordinates'][...]
continent = meta[(meta['longitude'] >= bounds[0]) & (meta['longitude'] <= bounds[2]) & (meta['latitude'] >= bounds[1]) & (meta['latitude'] <= bounds[3])]
data = dataset[timeindex][continent.index]
一般问题:
上面显示的代码成功运行,我能够将timeindex
输出中的24个索引传递到h5 py文件对象中。我最关心的是速度。使用NetHogs版本0.8.5- 2build 2(运行于Ubuntu 20.04上),我通过运行此脚本的相应Python进程密切监视了从Amazon的下载速度。
使用100 MB/s的连接(向下和向上),队列中没有其他下载,我目前观察到的平均下载速度为 *1500-1600 KB/秒 *,或我当前带宽的1/67。考虑到这一点以及亚马逊的云服务有多么庞大,我目前怀疑这是一个限制他们的问题。
我可以实施哪些更改或其他策略来增加此HDF 5文件部分的下载量?我对HDF 5的整体知识相当少,所以我很感激你的帮助!
2条答案
按热度按时间u0njafvf1#
开放能源数据倡议(OEDI)是NREL参与的一个项目。他们维护一个HSDS服务器和相应的Python代码,为公众提供免费,快速访问他们的一些大型数据集,包括NSRDB!
在这里查看NSRDB示例笔记本:https://github.com/NREL/hsds-examples/blob/master/notebooks/03_NSRDB_introduction.ipynb
mfuanj7w2#
检查事项:
1.您是在AWS内部还是外部访问数据?
1.1如果是,您是否在同一区域(例如,us-west-2)上运行Python代码?
1.2如果没有,请尝试在AWS中进行测试。
1.尝试替代的RANGE-GET解决方案。
2.1 https://docs.opendap.org/index.php?title=DMR%2B%2B
2.2 https://github.com/HDFGroup/hsds
1.如果您有足够的云预算,请使用EFS和DataSync。
在Cloudnomics中,性能= $。
查看我的关于云、地球数据和HDF的教程视频:https://www.youtube.com/watch?v=pB1I4rIPUyA&t=2s