我将所有类型的文件存储在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和本地文件系统中的大小