我对scala还是很陌生,不确定如何深入研究。 我有一个包含许多列的数据框,如下所示:
+---+-----+--------+--------+
| _1|_2._1|_2._2._1|_2._2._2|
+---+-----+--------+--------+
| 1| 2| 3| 4|
+---+-----+--------+--------+
我将其写入拼花地板,但是我已经有了一个包含将在下面的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”传递到上面的代码中,以使用必填列来编写实木复合地板。 谁能帮我吗?
答案 0 :(得分:0)
在读取数据框本身然后写入时加载架构。
spark.read.format("<format>")
.option("<key>", "<value>")
.schema(abcSchema)
.load("<path-to-file>")