Я нашел эту цитату на SO 44011846:
Unlike a traditional temp table, a temp view is NOT materialized at all even to memory. It's useful for accessing data in SQL but understand that its statements have to be evaluated EVERY time it's accessed –
Значит ли это, что он вернется обратно в Hive, если Hive является источником TempView?
Я так думаю, и поэтому большое количество повторных обращений является проблемой с точки зрения производительности.
@Shaido Но что тогда будет кешироваться при каждом вызове? Каждый вызов может смотреть на разные аспекты таблицы TempTable и фактически быть отдельным утверждением.
В таких ситуациях можно использовать функцию cacheTable. Я считаю, что кешируется вся таблица, см. Этот вопрос: stackoverflow.com/questions/39248621/…





Spark 1.6
Временная таблица / представление не хранятся в памяти. Они полезны только для доступа к данным из куста / rdbms.
Если вы используете Hive-
hiveContext.select("select * from tableA").registerTempTable("tableA")
Вышеуказанный оператор регистрирует только временную таблицу. Это трансформация. Когда выполняется какое-либо действие, он выполняет sql в улье и создает временную таблицу. Он будет выполняться каждый раз, когда выполняется какое-либо действие.
Если вы хотите кэшировать таблицу в памяти, вам нужно использовать следующую инструкцию:
hiveContext.cacheTable("tableA")
Это ленивая оценка. Всякий раз, когда выполняется какое-либо действие, он выполняет sql и сохраняет временную таблицу в памяти. В следующий раз действие выполняется над таблицей памяти. Он не будет оцениваться каждый раз.
Spark2.0
registerTempTable заменен на createOrReplaceTempView
Да, используйте
cache(), если вы хотите получить доступ к данным несколько раз.