Warum hält Spark SQL die Unterstützung von Indizes für unwichtig?
Zitieren der Spark-DataFrames,Datasets und SQL-Handbuch:
Eine Handvoll Hive-Optimierungen sind noch nicht in Spark enthalten. Einige davon (z. B. Indizes) sind aufgrund des speicherinternen Rechenmodells von Spark SQL weniger wichtig. Andere sind für zukünftige Versionen von Spark SQL vorgesehen.
a ich neu bei Spark bin, bin ich aus zwei Gründen ein bisschen verblüfft:
Spark SQL ist für die Verarbeitung von Big Data ausgelegt, und zumindest in meinem Anwendungsfall übersteigt die Datengröße die Größe des verfügbaren Speichers bei weitem. Unter der Annahme, dass dies nicht ungewöhnlich ist, was versteht man unter dem speicherinternen Rechenmodell von Spark SQL? Wird Spark SQL nur für Fälle empfohlen, in denen die Daten in den Speicher passen?
Sogar wenn die Daten in den Speicher passen, kann ein vollständiger Scan über einen sehr großen Datensatz sehr lange dauern. Ich lesedieses Argument gegen Indizierung in In-Memory-Datenbank, aber ich war nicht überzeugt. Das dortige Beispiel beschreibt einen Scan einer 10.000.000-Datensätze-Tabelle, aber das sind keine wirklich großen Datenmengen. Das Scannen einer Tabelle mit Milliarden von Datensätzen kann dazu führen, dass einfache Abfragen vom Typ "SELECT x WHERE y = z" ewig dauern, anstatt sofort zurückzusenden.
Ich verstehe, dass Indizes Nachteile wie langsameres EINFÜGEN / AKTUALISIEREN, Speicherplatzbedarf usw. aufweisen. In meinem Anwendungsfall verarbeite und lade ich jedoch zunächst einen großen Datenstapel in Spark SQL und untersuche dann diese Daten als Ganzes ohne weitere Änderungen . Spark SQL ist nützlich für die anfängliche verteilte Verarbeitung und das Laden der Daten, aber die fehlende Indizierung macht die interaktive Erkundung langsamer und umständlicher als erwartet.
Ich frage mich dann, warum das Spark SQL-Team Indizes in einem Maße für unwichtig hält, dass sie von ihrer Roadmap abweichen. Gibt es ein anderes Verwendungsmuster, das die Vorteile der Indizierung bietet, ohne auf die Implementierung von etwas Äquivalentem zurückzugreifen?