有没有办法使用Scala版本的Spark读取HDF5文件?看起来它可以在Python中完成(通过Pyspark),但我找不到Scala的任何内容。
答案 0 :(得分:5)
HDF5没有Hadoop InputFormat
实现,因为它不能被任意分割:
将容器拆成块有点像拿斧头砍成碎片,盲目地切断过程中的内容和智能布线。结果是一团糟,因为HDFS区块边界与内部HDF5货物布局或容器支撑结构之间没有对齐或关联。 Reference
同一网站讨论了将HDF5文件转换为Avro文件的可能性,从而使它们能够被Hadoop / Spark读取,但您提到的PySpark示例可能是一种更简单的方法,但作为链接文档提到,在Hadoop / Spark中有效处理HDF5文档需要解决许多技术挑战。
答案 1 :(得分: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)
答案 2 :(得分:0)
this question的答案有一个例子,说明如何从百万歌数据集读取多个hdf5文件(压缩为.tar.gz)并提取每个文件的功能,最终得到一个Spark RDD,其中每个元素都是RDD是每个hdf5文件的一系列功能。