读取HDF5文件

10

有没有一种方法可以使用Spark的Scala版本读取HDF5文件?

看起来在Python中可以通过Pyspark实现,但是我找不到Scala的相关内容。


这可能会帮助您入门。http://hdfgroup.org/wp/2015/03/from-hdf5-datasets-to-apache-spark-rdds/ - Mihajlo Eadric
3个回答

6
没有Hadoop的InputFormat实现适用于HDF5,因为它不能任意地被分割:
将容器分成块有点像用斧头将其砍成碎片,在此过程中盲目地切断内容和智能布线。结果是一团糟,因为HDFS块边界与内部HDF5货物布局或容器支持结构之间没有对齐或相关性。参考资料 同一网站讨论了将HDF5文件转换为Avro文件的可能性,从而使它们可以被Hadoop/Spark读取,但你提到的PySpark示例可能是一个更简单的方法,但正如链接文档所提到的,需要解决一些技术挑战才能有效地处理Hadoop/Spark中的HDF5文档。

2

有一个新产品可以通过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

这个问题的答案提供了一个示例,演示如何从百万歌曲数据集中读取多个压缩为.tar.gz格式的hdf5文件,并提取每个文件的特征,最终得到一个Spark RDD,其中RDD的每个元素都是每个hdf5文件的特征数组。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接