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

时间:2017-12-17 06:14:03

标签: scala apache-spark spark-dataframe

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

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

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

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

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

如何将180个文件夹读入单个Dataframe并且我不想使用联合(即不想将每天的数据文件夹分别读入每个单独的数据框,并且之后将所有联合成为巨型Dataframe,nope我不想这样做)。

我正在使用Spark 2.0&阶

1 个答案:

答案 0 :(得分:0)

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

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,它将是文件夹数*文件数