java - 从 S3 解压缩并读取 gz 文件 - Scala
问题描述
我在 S3 文件夹中有一个 gzip 文件列表,并且必须使用 scala 读取这些文件。迭代每个文件并将文件的内容存储在字符串缓冲区列表中。
这是读取一个文件并以字符串形式返回的方法。
def getDecompressedData(bucket: String, key: String) : String= {
val getObjectRequest = new GetObjectRequest(bucket, key)
val s3Object = s3Client.getObject(getObjectRequest)
val byteArray = IOUtils.toByteArray(s3Object.getObjectContent)
val inputStream = new GZIPInputStream(new ByteArrayInputStream(byteArray))
val data = scala.io.Source.fromInputStream(inputStream).mkString
inputStream.close()
data
}
我得到错误
Exception in thread "main" java.io.EOFException: Unexpected end of ZLIB input stream
at java.util.zip.InflaterInputStream.fill(InflaterInputStream.java:240)
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:158)
at java.util.zip.GZIPInputStream.read(GZIPInputStream.java:117)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
at com.amazonaws.util.IOUtils.toByteArray(IOUtils.java:44)
at com.amazonaws.util.IOUtils.toString(IOUtils.java:58)
在val data = scala.io.Source.fromInputStream(inputStream).mkString
解决方案
def getDecompressedData(bucket: String, key: String) : String= {
val getObjectRequest = new GetObjectRequest(bucket, key)
val s3Object = s3Client.getObject(getObjectRequest)
var data: String = ""
// If S3 file is compressed
if(gzip) {
val gzipData = new Scanner(new GZIPInputStream(s3Object.getObjectContent)).asScala
data = gzipData.mkstring
} else {
val plainText = new Scanner(new InputStreamReader(s3Object.getObjectContent)).asScala
data = plainText.mkstring
}
s3Object.close()
data
}
我已经提供了 gzip 文件和纯文件的代码。
推荐阅读
- reactjs - 找不到模块 gulp.js
- python - .set in function 在其他函数中找不到,因此它创建了一个错误 tkinter python
- python-3.x - 具有进程池的 Python 多处理管道
- r - 如何用ggplot绘制这个函数?
- jpa - 休眠条件查询中的 DATEDIFF 函数
- c# - Unity:当我释放移动输入时,玩家行为怪异
- google-smart-home - 定制现有的智能错误
- kubernetes - 使用 CLI 部署后,kubeflow UI 显示“无法访问站点”
- python - 在 Python 中使用贪心算法进行活动选择
- python - 正则表达式仅匹配副标题