scala - 如何在 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
解决方案
使用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
}
推荐阅读
- c++ - C ++中集合和多集合之间的多态性
- android - uiautomator 可以在 API 19 的模拟器上运行吗?
- angular - 我可以从我的角度应用程序中隐藏“highchart.com”文本吗?
- spring-boot - 从浏览器访问 Docker 容器中的 Spring-Boot 服务
- common-lisp - 有没有办法找出在 SBCL 中精确定义的原始函数(内置)如何?
- javascript - 我需要更改材质 UI 助手文本背景
- zoom-sdk - 是否有任何 API 可以为 Zoom 会议申请主机密钥?
- vue-router - Vue3 - 在组件内提供/注入对象后丢失数据
- php - 从 DateTimeType 类中删除秒
- c# - EF Core 无法保存修改后的实体