После нескольких дней размышлений об этом я все еще придерживаюсь этой проблемы: у меня есть одна таблица, где «timestamp» - это ключ раздела. Эта таблица содержит миллиарды строк.Spark-Cassandra: как эффективно ограничивать разделы
У меня также есть таблицы «временные ряды», которые содержат временные метки, связанные с конкретными процессами измерения.
С Spark Я хочу проанализировать содержимое большой таблицы. Конечно, неэффективно выполнять полное сканирование таблицы, и с довольно быстрым поиском в таблице timeseries я должен иметь возможность настраивать только, скажем, 10 тыс. Разделов.
Что является наиболее эффективным способом достижения этого?
Является SparkSQL достаточно умны, чтобы оптимизировать что-то вроде этого
sqlContext.sql("""
SELECT timeseries.timestamp, bigtable.value1 FROM timeseries
JOIN bigtable ON bigtable.timestamp = timeseries.timestamp
WHERE timeseries.parameter = 'xyz'
""")
В идеале я хотел бы ожидать Cassandra для извлечения временных отметок из timeseries
таблицы, а затем использовать, чтобы запросить только то подмножество разделов из bigtable
.
Спасибо за объяснение. Я где-то читал (слайды от вас?), Что соединитель будет расширен до «автоматически», «joinwithcassandratable» и 'repartitionbyrepllica', это все еще план? Если да, значит ли это, что Catalyst сможет также выполнить такую оптимизацию? –
Это наоборот, Catalyst должен сначала поддержать его, прежде чем мы сможем сделать эту стабильную функцию для Dataframes. Проверьте https://issues.apache.org/jira/browse/SPARK-12449?filter=-3 – RussS