Kontext. Ich habe Dutzende von SQL-Abfragen in separaten Dateien gespeichert. Zu Benchmarkzwecken habe ich eine Anwendung erstellt, die jede dieser Abfragedateien durchläuft und an eine eigenständige Spark-Anwendung übergibt. Letzterer analysiert zuerst die Abfrage, extrahiert die verwendeten Tabellen, registriert sie (unter Verwendung von: registerTempTable()
in Spark < 2 und createOrReplaceTempView()
in Spark 2) und führt die Abfrage effektiv aus (spark.sql()
).SparkSQL: intra-SparkSQL-Anwendungstabelle Registrierung
Herausforderung. Da die Tabellen Registrierung kann sehr zeitaufwendig sein, würde Ich mag träge registrieren um die Tabellen , dh nur einmal wenn sie ersten verwendet werden, und das in Form von Metadaten halten, die in den nachfolgenden Abfragen ohne weiteres verwendet werden können, ohne die Notwendigkeit, die Tabellen bei jeder Abfrage neu zu registrieren. Es ist eine Art Intra-Job-Caching, aber keine der Caching-Optionen, die Spark bietet (Tabellen-Caching), soweit ich weiß.
Ist das möglich? Wenn nicht, kann jemand einen anderen Ansatz vorschlagen, um das gleiche Ziel zu erreichen (indem man durch getrennte Abfragedateien iteriert und eine abfragende Spark-Anwendung ausführt, ohne die Tabellen zu registrieren, die bereits zuvor registriert wurden).
Ich kommentieren meine eigene Frage. Ich bin auf benannte RDDs/Objekte von [Spark Job Server] (https://github.com/spark-jobserver/spark-jobserver#named-objects) gestoßen. Ich habe sie nicht selbst ausprobiert, aber jeder, der an dieser Frage in der Zukunft vorbeikommt, möchte sich das vielleicht ansehen. –