我在每天创建的文件夹中有数据。
例如:以下是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
您可以为下面的目录名创建一个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它将是文件夹数*文件数