【问题标题】:Using AWS S3 and Apache Spark with hdf5/netcdf-4 data将 AWS S3 和 Apache Spark 与 hdf5/netcdf-4 数据一起使用
【发布时间】:2017-08-29 01:30:45
【问题描述】:

我有一堆存储在 AWS S3 中的大气数据,我想使用 Apache Spark 进行分析,但是在将其加载到 RDD 时遇到了很多麻烦。我已经能够在网上找到示例来帮助解决问题的各个方面:

-使用 h5py 通过h5py.File(filename) (https://hdfgroup.org/wp/2015/03/from-hdf5-datasets-to-apache-spark-rdds/) 读取本地存储科学数据文件

-boto/boto3 通过get_contents_as_string()

从 S3 获取 textfile 格式的数据到 Spark

-通过keys.flatMap(mapFunc)将一组文本文件映射到一个RDD

但我似乎无法让这些部分一起工作。具体来说——你如何从 s3 加载 netcdf 文件(使用 boto 或直接,不附加到使用 boto),然后使用 h5py?或者您可以将netcdf文件视为二进制文件并将其作为二进制文件加载并使用sc.BinaryFile(binaryFile)映射到rdd?

这里有几个类似的问题没有得到完全回答:

How to read binary file on S3 using boto?

using pyspark, read/write 2D images on hadoop file system

【问题讨论】:

  • 你能否将 netcdf 文件视​​为二进制文件并将其加载为二进制文件 - 据我所知答案是否定的。 hpy5 直接使用 C 客户端,不支持缓冲区 (BytesIO)。 S3Fs 无忧get,可用于从S3 复制到本地文件系统,然后使用h5py 访问。
  • 感谢@zero323,查找s3fs界面

标签: amazon-web-services apache-spark boto hdf5 netcdf


【解决方案1】:

使用netCDF4s3fs 模块,您可以:

from netCDF4 import Dataset
import s3fs
s3 = s3fs.S3FileSystem()

filename = 's3://bucket/a_file.nc'
with s3.open(filename, 'rb') as f:
    nc_bytes = f.read()

root = Dataset(f'inmemory.nc', memory=nc_bytes)

确保您已设置为从 S3 读取。有关详细信息,here 是文档。

【讨论】:

    猜你喜欢
    • 2018-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多