给出了s3位置的seq需要什么。任何两个位置的区别是表的分区列值。
每个镶木地板文件夹都有相同的架构。
因此,我们需要循环使用相同模式的s3 parquet文件路径序列,并保存在scala的单个数据帧中。
如果您有一个包含要导入的所有目录的数组,您可以遍历该数组并制作数据帧集合,然后将它们合并为一个。
试试这样的东西。
//You have now a collection of dataframes
val dataframes = directories.map(dir =>
spark.read.parquet(dir))
//Let's union them into one
val df_union = dataframes.reduce(_ union _)
如果您打开这些选项,那么您可以简单地递归加载文件。
spark.read.parquet("s3a://path/to/root/")
选项如下。
spark.hive.mapred.supports.subdirectories true
spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive true
这可以用在一种方式
import org.apache.spark.{SparkContext, SparkConf}
import org.apache.spark.sql.SparkSession
val conf = new SparkConf()
.setMaster("local[2]")
.setAppName("test")
.set("spark.hive.mapred.supports.subdirectories","true")
.set("spark.hadoop.mapreduce.input.fileinputformat.input.dir.recursive","true")
val spark = SparkSession.builder.config(conf).getOrCreate()
val df = spark.read.parquet("s3a://path/to/root/")