我正在尝试从S3读取大型CSV文件。我的文件大小是100MB的GZip格式,我需要解压缩然后读取csv数据。
所以我在answer下面找到相同和更低的代码片段。
S3Object fileObj = client.getObject(bucketName, repoPath);
BufferedReader reader = new BufferedReader(new InputStreamReader(new GZIPInputStream(fileObj.getObjectContent())));
BufferedWriter fileWriter = new BufferedWriter(new FileWriter(new File("output.json")));
String line = null;
while ((line = reader.readLine()) != null) {
//convert csv data to json
fileWriter.write(line +"\n");
}
fileWriter.flush();
fileWriter.close();
我对上面的代码有两个问题:
使用spark时,需要更多时间,我不知道如何在spark中处理gz文件。
答案 0 :(得分:2)
我认为你应首先解压缩GZipped文件,然后使用spark context读取每个文本文件或解压缩的目录。因为,Apache Spark使用Hadoop FS API来读取S3上的文件,以利用分布式处理,你应该将它们解压缩。
对于MapReduce,如果您需要拆分压缩数据,BZip2, LZO, and Snappy
格式可以拆分,但GZip
不可拆分。
一旦您的数据被解压缩,您可以使用SparkContext
来读取以下文件
sparkContext.textFile("s3n://yourAccessKey:yourSecretKey@/path/")