Scala 使用定义的列名编写拼花地板文件,而不是使用dataframe';s列名

Scala 使用定义的列名编写拼花地板文件,而不是使用dataframe';s列名,scala,dataframe,apache-spark,parquet,Scala,Dataframe,Apache Spark,Parquet,我对scala非常陌生,不知道如何深入了解这一点。 我有一个包含许多列的数据框架,如下所示: +---+-----+--------+--------+ | _1|_2._1|_2._2._1|_2._2._2| +---+-----+--------+--------+ | 1| 2| 3| 4| +---+-----+--------+--------+ 我将其写入parquet中,但我已经有了一个模式,其中包括parquert中的列名,如下所示: va

我对scala非常陌生,不知道如何深入了解这一点。 我有一个包含许多列的数据框架,如下所示:

+---+-----+--------+--------+
| _1|_2._1|_2._2._1|_2._2._2|
+---+-----+--------+--------+
|  1|    2|       3|       4|
+---+-----+--------+--------+
我将其写入parquet中,但我已经有了一个模式,其中包括parquert中的列名,如下所示:

  val abcSchema = StructType(Array(
    StructField("ModID", StringType),
    StructField("ProGroupId", StringType),
    StructField("ProdId", StringType),
    StructField("SegId", StringType),
    StructField("Date", DateType),
    StructField("MShare", DoubleType),
    StructField("MtId", IntegerType),
    StructField("Flag", BooleanType),
    StructField("ProType", StringType),
    StructField("abc", StringType),
    StructField("xyz", StringType),
    StructField("ghi", DoubleType),
    StructField("jkl", DoubleType),
    StructField("mno", DoubleType),
    StructField("pqr", DoubleType),
    StructField("stu", DoubleType),
    StructField("wxy", DoubleType),
    StructField("zyw", DoubleType),
    StructField("pou", DoubleType),
    StructField("hyt", DoubleType),
    StructField("kpol", DoubleType),
    StructField("uyt", DoubleType),
    StructField("qwre", DoubleType),
    StructField("jgt", DoubleType),
    StructField("lpou", DoubleType),
    StructField("qret", DoubleType),
    StructField("cvd", DoubleType),
    StructField("bnhy", DoubleType),
    StructField("nnn", DoubleType),
    StructField("loi", DoubleType),
    StructField("kql", DoubleType)
  ))
拼花地板文件的最终结果应该是这样的

+------+----------+--------+--------+
| ModID|ProGroupId|ProdId  |abc     |
+------+----------+--------+--------+
|  1   |    2     |       3|       4|
+------+----------+--------+--------+ 
我已经编写了下面的代码来使用该代码创建拼花地板

val result = Try({

      dataFrame
        .write
        .mode(SaveMode.Overwrite)
        .format("parquet")
        .partitionBy("Date")
        .save(outputPath)
    })
但是,我不确定如何将“abcSchema”传递到上述代码中,以编写具有所需列的拼花地板。
有人能帮我吗???

在读取数据帧本身的同时加载模式,然后写入

spark.read.format("<format>")
     .option("<key>", "<value>")
     .schema(abcSchema)
     .load("<path-to-file>")
spark.read.format(“”)
.选项(“,”)
.schema(abcSchema)
.load(“”)

在读取数据帧本身的同时加载架构,然后写入

spark.read.format("<format>")
     .option("<key>", "<value>")
     .schema(abcSchema)
     .load("<path-to-file>")
spark.read.format(“”)
.选项(“,”)
.schema(abcSchema)
.load(“”)