我看到这个示例代码通过火花2.3覆盖分区真的很好
dfPartition.coalesce(coalesceNum).write.mode("overwrite").format("parquet").insertInto(tblName)
我的问题是,即使加入.format("parquet")
后它没有被写为实木复合地板,而.c000。
压实如果工作分区的覆盖,但不是写为实木复合地板。
这里Fullc代码
val sparkSession = SparkSession.builder //.master("local[2]")
.config("spark.hadoop.parquet.enable.summary-metadata", "false")
.config("hive.exec.dynamic.partition", "true")
.config("hive.exec.dynamic.partition.mode", "nonstrict")
.config("parquet.compression", "snappy")
.enableHiveSupport() //can just comment out hive support
.getOrCreate
sparkSession.sparkContext.setLogLevel("ERROR")
println("Created hive Context")
val currentUtcDateTime = new DateTime(DateTimeZone.UTC)
//to compact yesterdays partition
val partitionDtKey = currentUtcDateTime.minusHours(24).toString("yyyyMMdd").toLong
val dfPartition = sparkSession.sql(s"select * from $tblName where $columnPartition=$hardCodedPartition")
if (!dfPartition.take(1).isEmpty) {
sparkSession.conf.set("spark.sql.sources.partitionOverwriteMode", "dynamic")
dfPartition.coalesce(coalesceNum).write.format("parquet").mode("overwrite").insertInto(tblName)
sparkSession.sql(s"msck repair table $tblName")
Helpers.executeQuery("refresh " + tblName, "impala", resultRequired = false)
}
else {
"echo invalid partition"
}
这里是我使用此代码Overwrite specific partitions in spark dataframe write method建议的问题。
我喜欢这个方法,不必列出分区列这是非常好的好的。我可以轻松地使用它在很多情况下,
使用大规模2:11,鼎辉5.12,2.3火花
有什么建议么
扩展.c000涉及到谁做的文件,而不是实际的文件格式执行。该文件可能是实木复合地板和与.c000,或.snappy或.zip结束......要知道实际的文件格式,运行以下命令:
hadoop dfs -cat /tmp/filename.c000 | head
其中/tmp/filename.c000
是HDFS路径到您的文件。你会看到一些奇怪的simbols,你应该看到实木复合地板在某个地方,如果它实际上是一个木文件。