Ich benutze Spark 2.0 und ich frage mich, ob es möglich ist, alle Dateien für spezifische Hive-Tabelle aufzulisten? Wenn dies der Fall ist, kann ich diese Dateien inkrementell direkt mit dem Spark sc.textFile("file.orc")
aktualisieren. Wie kann ich der Hive-Tabelle eine neue Partition hinzufügen? Gibt es eine Api auf der Bienenstockmetastase, die ich aus Funken benutzen kann?Hive on Spark listet alle Partitionen für spezifische Hive-Tabelle auf und fügt eine Partition hinzu
Gibt es eine Möglichkeit, die interne hive Funktion zu erhalten, die Datenrahmen row => partition_path
meine Haupt Argumentation Karte inkrementelle Updates für eine Tabelle. Im Augenblick ist die einzige Art, wie ich herausgefunden habe, ist FULL OUTER JOIN
SQL + SaveMode.Overwrite
, die nicht so effizient ist, weil er die ganze Tabelle überschrieben werden, während mein Hauptinteresse inkrementelles Updates für bestimmte Partitionen/Hinzufügen neue Partition
EDIT von was ich auf dem HDFS gesehen habe, wenn SaveMode.Overwrite Funke die Tabellendefinition ausgeben wird, dh CREATE TABLE my_table .... PARTITION BY (month,..)
. Spark setzt alle Dateien unter $HIVE/my_table
und nicht unter $HIVE/my_table/month/...
, was bedeutet, dass er die Daten nicht partitioniert. als ich df.write.partitionBy(...).mode(Overwrite).saveAsTable("my_table")
schrieb, habe ich auf hdfs gesehen, dass es richtig ist. Ich habe SaveMode.Overwrite
verwendet, weil ich Datensätze aktualisiere und Daten nicht anhege.
Ich lade Daten mit spark.table("my_table")
was bedeutet, dass Funken faul laden die Tabelle, die ein Problem ist, da ich nicht alle die Tabelle nur Teil von If laden will.
für die Frage:
1.Does Funken gehen, um die Daten zu mischen, weil ich partitionBy()
verwendet haben, oder er vergleicht aktuelle Partition und wenn ihr die gleichen er die Daten nicht mischen wird.
2.Funkt Smart intelligent genug, um Partitionsbeschneidung zu verwenden, wenn ein Teil der Daten mutiert wird, d. H. Nur für einen bestimmten Monat/Jahr, und diese Änderung anwenden, anstatt alle Daten zu laden? (FULL OUTER JOIN ist grundsätzlich Operation, die alle in der Tabelle Scan)
vorausgesetzt konfiguriert haben nenne ich 'partitionBy()' zweimal für das gleiche Schema. Ist Spark intelligent genug, um zu erkennen, dass er diese Operation vermeiden kann, vorausgesetzt, ich hätte Daten wie Sie erwähnt und ich möchte "Jahr = 2017/Monat = 01" zu meinem Datenrahmen hinzufügen, ist Funken intelligent genug, um zu erkennen, dass er es nicht tut müssen Daten von 'Jahr2016/Monat = 1' mischen/laden? –
Der Befehl 'show partitions my_table' gibt mir nicht den Speicherort/Pfad für die Dateien im Hadoop-Dateisystem. –
@DavidH Wenn Sie einen Datenrahmen mit 'Jahr 2017' und' Monat01' haben und diese Daten in die Tabelle schreiben, erstellt Spark diese Partition und speichert neue Daten, ohne Daten von 'Jahr2016/Monat = 1' zu laden. Ich bekomme deinen zweiten Kommentar nicht. wenn Sie ['show partitions my_table'] aufrufen (https://docs.cloud.databricks.com/docs/latest/databricks_guide/04%20SQL,%20DataFrames%20%26%20Datasets/11%20SparkSQL%20Language%20Manual/ Show% 20Partitions.html) und Sie habenhivesupport aktiviert, spark sqlshould Liste anzeigen zB: 'yearX/monthY' für partitionierte' my_table' – VladoDemcak