Цитата Spark DataFrames, Наборы данных и руководство по SQL:
В Spark еще не включена небольшая оптимизация Hive. Некоторые из эти (например, индексы) менее важны из-за SQL-запросов Spark вычислительной модели в памяти. Другие выпущены для будущих выпусков Spark SQL.
Будучи новым для Spark, я немного озадачен этим по двум причинам:
-
Spark SQL предназначен для обработки больших данных и, по крайней мере, для моего использования в случае, если размер данных намного превышает размер доступной памяти. Предполагая, что это не редкость, что подразумевается под "Spark SQLs" in-memory "? Искры Spark SQL рекомендуется только для случаи, когда данные вписываются в память?
-
Даже если данные вписываются в память, полное сканирование на очень большом набор данных может занять много времени. Я прочитал этот аргумент против индексирование в базе данных в памяти, но я не был убежден. Пример там обсуждается сканирование таблицы в 10 000 000 записей, но это не действительно большие данные. Сканирование таблицы с миллиардами записей может вызвать простые запросы типа "SELECT x WHERE y = z" принимают навсегда вместо этого немедленного возвращения.
Я понимаю, что индексы имеют такие недостатки, как медленнее INSERT/UPDATE, требования к пространству и т.д. Но в моем случае я сначала обрабатываю и загружаю большую партию данных в Spark SQL, а затем исследую эти данные в целом без дальнейшие изменения. Spark SQL полезен для начальной распределенной обработки и загрузки данных, но отсутствие индексации делает интерактивные исследования медленнее и громоздкими, чем я ожидал.
Мне интересно, почему команда Spark SQL считает, что индексы неважны до такой степени, что они не совпадают с их дорожной картой. Есть ли другой шаблон использования, который может обеспечить преимущества индексации, не прибегая к реализации чего-то эквивалентного независимо?