Как работает 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
звонок. Вот доказательство того, что он был кэширован:
связаны так: Искра 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
data.createOrReplaceTempView("Data")
Теперь мы можем запускать sql-запросы поверх только что созданного представления таблицы
%sql select Week as Date,Campaign Type,Engagements,Country from Data order by Date asc
SparkSQl поддерживает написание программ с использованием Dataset и Dataframe API, наряду с этим необходимо поддерживать sql.
для поддержки Sql на фреймах данных сначала требуется определение таблицы с именами столбцов, а также, если он создает таблицы, метасторо улья получит много ненужных таблиц, потому что Spark-Sql изначально находится на hive. Таким образом, он создаст временное представление, которое временно доступно в hive на время и используется как любая другая таблица hive, как только Spark Context stop он будет удален.
чтобы создать представление, разработчику нужна утилита под названием createOrReplaceTempView