0

我正在尝试从 S3 读取一个大型 CSV 文件。我的 GZip 格式文件大小为 100MB,我需要解压缩然后读取 csv 数据。

所以我在下面找到了相同的答案,下面的代码片段可以解决问题。

        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();

我对上面的代码有两个查询:

  1. 提取在本地系统临时目录/JVM 或 S3 上发生在哪里?
  2. 它是如何解决内存问题的?

使用 spark 时,需要更多时间,我不确定如何在 spark 中处理 gz 文件。

4

1 回答 1

2

我认为您应该首先解压缩 GZipped 文件,然后使用 spark 上下文读取每个文本文件或解压缩目录。因为,Apache Spark 使用 Hadoop FS API 来读取您在 S3 上的文件以利用分布式处理,您应该解压缩它们。

对于 MapReduce,如果您需要可拆分压缩数据,BZip2, LZO, and Snappy格式是可拆分的,但GZip不是。

一次,您的数据被解压缩,您可以使用SparkContext来读取文件,如下所示

sparkContext.textFile("s3n://yourAccessKey:yourSecretKey@/path/")
于 2018-05-01T05:17:42.170 回答