【问题标题】:How to get number of files read from S3 path in Spark如何获取从 Spark 中的 S3 路径读取的文件数
【发布时间】:2021-06-12 10:57:57
【问题描述】:

所以,我在 Spark 中使用最通用的 S3 读取代码,它将我指定目录中的多个文件读取到单个数据帧中:

val df=spark.read.option("sep", "\t")
  .option("inferSchema", "true")
  .option("encoding","UTF-8")
  .schema(sch)
  .csv("s3://my-bucket/my-directory/")

获取从该路径读取的文件数的最佳方法是什么(如果有)?

【问题讨论】:

标签: scala apache-spark amazon-s3 apache-spark-sql


【解决方案1】:

您可以尝试计算不同的input_file_name()


val nbFiles = df.select(input_file_name()).distinct.count

或使用 Hadoop 文件系统:

import org.apache.hadoop.fs.Path

val s3Path = new Path("s3://my-bucket/my-directory/")
val contentSummary = s3Path.getFileSystem(sc.hadoopConfiguration).getContentSummary(s3Path)

val nbFiles = contentSummary.getFileCount()

【讨论】:

  • 谢谢。作为一个附加组件,我应该做什么(在 Spark 中)来获取从我的目录中读取的所有文件的总文件大小(以字节为单位)?换句话说,我的数据框的总大小?
  • @DebapratimChakraborty 看看这个answer 的大小。
  • 谢谢。这解决了我的目的,但我只想问 - 当我将 csv 读入数据帧时,spark 是否会生成任何关于它的元数据?比如说大小、行数等?
  • 建议不要使用 getContentSummary,因为它是一个可悲的单线程低效 treewalk。避免针对任何对象存储使用
猜你喜欢
  • 2017-02-25
  • 2021-08-15
  • 2019-03-08
  • 2020-04-12
  • 1970-01-01
  • 2021-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多