我将所有类型的文件存储在Amazon S3上。在亚马逊S3存储桶中,所有文件都存储在不同的文件夹中,我知道亚马逊s3中没有文件夹的概念。对象仅由其键标识。如果我使用“mydocs / personal / profile-pic.jpg”之类的键存储任何文件,则意味着将在此处创建两个父文件夹(mydocs文件夹内的个人文件夹)。

我想计算Java中“mydocs”之类的任何文件夹的大小。我使用以下给出的代码计算了存储桶的总大小:

public long calculateBucketSize(String bucketName) {
long totalSize = 0;
    int totalItems = 0;
    ObjectListing objects = listObjects(bucketName);
    do {
        for (S3ObjectSummary objectSummary : objects.getObjectSummaries()) {
            totalSize += objectSummary.getSize();
            totalItems++;
        }
        objects = listNextBatchOfObjects(objects);
    } while (objects.isTruncated());
    System.out.println("Amazon S3 bucket: " + bucketName + " containing "
            + totalItems + " objects with a total size of " + totalSize
            + " bytes.");

    return totalSize;
}

此方法将返回存储桶的总大小。我想计算任何单个文件夹的大小。任何帮助将不胜感激。

最佳答案

org.apache.hadoop lib有一个简单的方法

  def calculateSize(path: String)(implicit spark: SparkSession): Long = {
    val fsPath = new Path(path)
    val fs = fsPath.getFileSystem(spark.sparkContext.hadoopConfiguration)
    fs.getContentSummary(fsPath).getLength
  }

此功能可以计算s3,hdfs和本地文件系统中的大小

07-24 09:50
查看更多