Я заметил огромную разницу в производительности при записи в паркетную таблицу с несколькими вызовами См. Следующий Scala пример кода.
val df = spark.table("my_parquet_partitioned_table")
df.write.partitionBy("event_date").mode("overwrite").saveAsTable("my_table2")
df.createOrReplaceTempView("df_view")
spark.sqlContext.setConf("hive.exec.dynamic.partition.mode", "nonstrict") // necessary for next line. Why saveAsTable doesn't need this?
spark.sql("insert overwrite table my_table3 select * from df_view") // 10
в 10 раз медленнее, чем saveAsTable.
КСТАТИ Я выполнял это на AWS / EMR.