如何覆盖在apache的火花2.3分,同时还写有INSERTINTO方法,实木复合地板

问题描述 投票:1回答:1

我看到这个示例代码通过火花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火花

有什么建议么

scala apache-spark hadoop2
1个回答
0
投票

扩展.c000涉及到谁做的文件,而不是实际的文件格式执行。该文件可能是实木复合地板和与.c000,或.snappy或.zip结束......要知道实际的文件格式,运行以下命令:

hadoop dfs -cat /tmp/filename.c000 | head

其中/tmp/filename.c000是HDFS路径到您的文件。你会看到一些奇怪的simbols,你应该看到实木复合地板在某个地方,如果它实际上是一个木文件。

© www.soinside.com 2019 - 2024. All rights reserved.