首页 > 解决方案 > 如何在 Azure 上读取 Gzipped 文件,无需 Spark/Scala 中的 (.gz) 扩展名

问题描述

我有一个 Gzip 文件,在 Azure 上没有 .gz 扩展名。路径:https ://xxxx.blob.core.windows.net/xx/xx/0_2017/xxx/0/100103900

我想阅读 spark/scala 中的 gzipped 文件。我浏览了一些建议我使用 sc.binaryFiles() 但得到未解决的错误的帖子。

试过但没有运气

spark.read.option("header","true").option("inferSchema","true").textFile(newFollowersStartDatePath).show()

我得到的示例输出

我相信 spark 通过自动解压缩以 .gz 终止的文件来读取 gzip 文件。寻找一些帮助来读取未指定扩展名的 gzip 文件。

预期输出将是一个 id 列表(一列)

1343423
2342342
2343232
2342343

标签: scalaapache-spark

解决方案


使用binaryFiles完成的技巧

sparkSession.sparkContext.binaryFiles(filePath)
      .flatMap({ case (_, portableDataStream) =>
        val dataInputStream = new java.io.DataInputStream(
          new GZIPInputStream(portableDataStream.open))
        Iterator.continually( Try(dataInputStream.readLong())).takeWhile(result => {
          result match {
            case Success(_) => true
            case Failure(_) =>  dataInputStream.close()
              false
          }
        })
      }).flatMap(_.toOption).toDS
  }

推荐阅读