如何从多个文件夹读取到单个Dataframe

问题描述 投票:0回答:1

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

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

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

每个文件夹都有多个镶木地板格式的数据分区。

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

如何将180个文件夹读入单个Dataframe,我不想使用联合(即不想将每一天的数据文件夹分别读入每个单独的数据框,然后再将所有联合到巨型Dataframe中,不管我不想这样做)。

我使用Spark 2.0和Scala

scala apache-spark spark-dataframe
1个回答
0
投票

您可以为下面的目录名创建一个regex,如果只想要文件中的内容,可以使用SparkSession.read,如果你想要像[filename,record]这样的[K,V]对,可以使用sparkContext.wholeTextFiles

val inputpath="/root/path/todir/2015{0[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它将是文件夹数*文件数

© www.soinside.com 2019 - 2024. All rights reserved.