提问者:小点点

循环具有相同模式的s3 parquet文件路径序列,并保存在单个数据框中scala


给出了s3位置的seq需要什么。任何两个位置的区别是表的分区列值。

每个镶木地板文件夹都有相同的架构。

因此,我们需要循环使用相同模式的s3 parquet文件路径序列,并保存在scala的单个数据帧中。


共2个答案

匿名用户

如果您有一个包含要导入的所有目录的数组,您可以遍历该数组并制作数据帧集合,然后将它们合并为一个。

试试这样的东西。

//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/")