Die Hive-Tabelle wurde mit 4 Partitionen erstellt.Spark-Hive-Partitionierung
CREATE TABLE IF NOT EXISTS hourlysuspect (cells int, sms_in int) partitioned by (traffic_date_hour string) stored as ORC into 4 buckets
Die folgenden Zeilen in der Funkencode Einfügen von Daten in dieser Tabelle
hourlies.write.partitionBy("traffic_date_hour").insertInto("hourly_suspect")
und in der Funken defaults.conf, ist die Anzahl der parallelen Prozesse 128
spark.default.parallelism=128
The Problem ist, dass, wenn die Einfügungen in der Hive-Tabelle passieren, es 128 Partitionen statt 4 Buckets hat. Der StandardwertParallelismus kann nicht auf 4 reduziert werden, da dies zu einem sehr sehr langsamen System führt. Außerdem habe ich die DataFrame.coalesce-Methode ausprobiert, aber das macht die Einfügungen zu langsam.
Gibt es eine andere Möglichkeit, die Anzahl der Buckets auf 4 zu erhöhen, wenn die Daten in die Tabelle eingefügt werden?
Mehr Einsicht benötigt, speziell Code für hourlies.write. Aber wenn ich raten muss, versuchen Sie, Daten zu speichern, ohne Collect oder Take zu verwenden. So versucht jeder Executor, Daten in hdfs zu speichern, wodurch es 128 wird (was Ihre Parallelität ist). –
Das ist richtig, die Executoren schreiben mit der Standardparallelität in hdfs. hourlies ist ein DataFrame und write ist eine für den DataFrame definierte Funktion – sparkDabbler