Как работает createOrReplaceTempView в Spark?

Я новичок в Spark и Spark SQL.

Как createOrReplaceTempView работа в Spark?

Если мы регистрируем RDD объектов в виде таблицы будет искра хранить все данные в памяти?

3 ответов


createOrReplaceTempView создает (или заменяет, если это имя представления уже существует) лениво оцененное "представление", которое затем можно использовать как таблицу hive в Spark SQL. Это не сохраняйте в памяти, если вы не кэшируете набор данных, лежащий в основе представления.

scala> val s = Seq(1,2,3).toDF("num")
s: org.apache.spark.sql.DataFrame = [num: int]

scala> s.createOrReplaceTempView("nums")

scala> spark.table("nums")
res22: org.apache.spark.sql.DataFrame = [num: int]

scala> spark.table("nums").cache
res23: org.apache.spark.sql.Dataset[org.apache.spark.sql.Row] = [num: int]

scala> spark.table("nums").count
res24: Long = 3

данные кэшируются полностью только после .count звонок. Вот доказательство того, что он был кэширован:

Cached nums temp view/table

связаны так: Искра createOrReplaceTempView vs createGlobalTempView

соответствующая цитата (по сравнению с постоянной таблицей): "в отличие от команды createOrReplaceTempView, saveAsTable материализует содержимое фрейма данных и создает указатель на данные в метасторе улья."от https://spark.apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables

Примечание : createOrReplaceTempView ранее registerTempTable


CreateOrReplaceTempView создаст временный вид таблицы на память не presistant в этот момент, но вы можете выполнить SQL запрос на это . если вы хотите сохранить его, вы можете сохранить или использовать saveAsTable для сохранения.

сначала мы читаем данные в формате csv, а затем преобразуем в фрейм данных и создаем temp view

чтение данных в формате CSV

val data = spark.read.format("csv").option("header","true").option("inferSchema","true").load("FileStore/tables/pzufk5ib1500654887654/campaign.csv")

печать схема

данные.printSchema

SchemaOfTable

data.createOrReplaceTempView("Data")

Теперь мы можем запускать sql-запросы поверх только что созданного представления таблицы

  %sql select Week as Date,Campaign Type,Engagements,Country from Data order     by Date asc

enter image description here


SparkSQl поддерживает написание программ с использованием Dataset и Dataframe API, наряду с этим необходимо поддерживать sql.

для поддержки Sql на фреймах данных сначала требуется определение таблицы с именами столбцов, а также, если он создает таблицы, метасторо улья получит много ненужных таблиц, потому что Spark-Sql изначально находится на hive. Таким образом, он создаст временное представление, которое временно доступно в hive на время и используется как любая другая таблица hive, как только Spark Context stop он будет удален.

чтобы создать представление, разработчику нужна утилита под названием createOrReplaceTempView