如何从多个文件夹读取到单个数据框

Posted

技术标签:

【中文标题】如何从多个文件夹读取到单个数据框【英文标题】:How to read from multiple folders into single Dataframe 【发布时间】:2018-05-30 20:44:41 【问题描述】:

我在每天创建的文件夹中有数据。

例如:以下是 AWS S3 中全年(2017 年)的数据文件夹格式,即 365 个文件夹

student_id=20170415
student_id=20170416
student_id=20170417
student_id=20170418

每个文件夹都有多个拼花格式的数据分区。

现在我只想读取过去 6 个月(180 天/180 个文件夹)的数据并在几列上执行一些逻辑。

如何将过去的 180 个文件夹读入单个数据框,我不想使用联合(即,不想将每天的数据文件夹分别读入每个单独的数据框,然后再将所有文件夹合并成巨型数据框,不,我不想那样做)。

我正在使用 Spark 2.0 和 Scala

【问题讨论】:

【参考方案1】:

您可以为目录名称创建一个regex,如下所示,如果您只需要文件中的内容,请使用 SparkSession.read,如果您想要 [K,V] 对,例如 [filename,record,请使用 sparkContext.wholeTextFiles ]

val inputpath="/root/path/todir/20150[1-6][0-3]*"//reads only first six months folder(01-06)
spark.sparkContext.wholeTextFiles(inputpath).toDF().show(1000) //Gives [K,V]
val data=spark.read.csv(inputpath).show(10000) //Gives only content

两者都会产生一个 DF。对于 sparkSession.read,大小将是文件夹数 * 每个文件中的行数,对于 SparkContext.wholeTextFiles,它将是文件夹数 * 文件数

【讨论】:

以上是关于如何从多个文件夹读取到单个数据框的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 pyarrow 从 S3 读取镶木地板文件列表作为熊猫数据框?

如何从文件创建多个数据框?

根据文件名将目录中的多个 .xlsx 文件读取到单独的 Pandas 数据框中

如何使用 dask/fastparquet 从多个目录中读取多个 parquet 文件(具有相同架构)

如何从压缩文件中读取多个文件?

有效地将数据从 CSV 读取到具有多个分隔符的数据框中