读取HDF5文件[关闭]

问题描述 投票:9回答:3

是否有使用Scala版本的Spark读取HDF5文件的方法?

看起来好像可以在Python中完成(通过Pyspark),但是我找不到Scala的任何东西。

scala apache-spark hdf5
3个回答
5
投票

[HDF5没有Hadoop InputFormat实现,因为它无法任意拆分:

将容器破碎成块有点像拿斧头并将其切成碎片,在此过程中盲目切断内容物和智能接线。结果是一团糟,因为HDFS块边界与内部HDF5货物布局或集装箱支撑结构之间没有对齐或关联。 Reference

同一站点讨论了将HDF5文件转换为Avro文件的可能性,从而使它们可以被Hadoop / Spark读取,但是您提到的PySpark示例可能是更简单的方法,但正如链接文档所述,要有效地使用Hadoop / Spark中的HDF5文档,需要解决许多技术难题。


1
投票

[有一种新产品可以通过Scala从Apache Spark与HDF5通讯:

https://www.hdfgroup.org/downloads/hdf5-enterprise-support/hdf5-connector-for-apache-spark/

使用上述产品,您可以像下面在Scala中那样打开和阅读HDF5:

//
// HOW TO RUN:
//
// $spark-2.3.0-SNAPSHOT-bin-hdf5s-0.0.1/bin/spark-shell -i demo.scala

import org.hdfgroup.spark.hdf5._
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().appName("Spark SQL HDF5 example").getOrCreate()

// We assume that HDF5 files (e.g., GSSTF_NCEP.3.2008.12.31.he5) are 
// under /tmp directory. Change the path name ('/tmp') if necessary.
val df=spark.read.option("extension", "he5").option("recursion", "false").hdf5("/tmp/", "/HDFEOS/GRIDS/NCEP/Data Fields/SST")

// Let's print some values from the dataset.
df.show()

// The output will look like below.
//
//+------+-----+------+
//|FileID|Index| Value|
//+------+-----+------+
//|     0|    0|-999.0|
//|     0|    1|-999.0|
//|     0|    2|-999.0|
//...

System.exit(0)

0
投票

this question的答案有一个示例,该示例说明如何从“百万歌曲”数据集中读取多个hdf5文件(压缩为.tar.gz)并提取每个文件的功能,最终得到Spark RDD,其中RDD的每个元素为每个hdf5文件的功能数组。

© www.soinside.com 2019 - 2024. All rights reserved.