【问题标题】:Reading HDF5 files [closed]读取 HDF5 文件 [关闭]
【发布时间】:2015-04-18 09:54:15
【问题描述】:

有没有办法使用 Scala 版本的 Spark 读取 HDF5 文件?

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

【问题讨论】:

标签: scala apache-spark hdf5


【解决方案1】:

没有适用于 HDF5 的 Hadoop InputFormatimplementation,因为它不能被任意拆分:

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

同一站点讨论了将 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)
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2014-06-07
        • 2022-07-07
        • 2017-11-26
        • 2013-01-23
        • 2015-03-19
        • 1970-01-01
        • 2018-06-26
        • 2019-12-30
        • 2010-11-03
        相关资源
        最近更新 更多