web-dev-qa-db-fra.com

Comment createOrReplaceTempView fonctionne-t-il dans Spark?

Je suis nouveau sur Spark et Spark SQL.

Comment fonctionne createOrReplaceTempView dans Spark? 

Si nous enregistrons une RDD d'objets sous la forme d'une table, toutes les données seront conservées en mémoire? 

14
Abir Chokraborty

createOrReplaceTempView crée (ou remplace si ce nom de vue existe déjà) une "vue" évaluée paresseuse que vous pouvez ensuite utiliser comme une table Hive dans Spark SQL. Not n'est pas conservé en mémoire, sauf si vous mettez en cache l'ensemble de données qui sous-tend la vue. 

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

Les données sont entièrement mises en cache uniquement après l'appel .count. Voici la preuve qu'il a été mis en cache:

 Cached nums temp view/table

SO associé: spark createOrReplaceTempView vs createGlobalTempView

Devis pertinent (comparant à la table persistante): "Contrairement à la commande createOrReplaceTempView, saveAsTable matérialisera le contenu du DataFrame et créera un pointeur sur les données du métastore Hive." from https://spark.Apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables

Remarque: createOrReplaceTempView était anciennement registerTempTable

29
Garren S

CreateOrReplaceTempView créera une vue temporaire de la table sur la mémoire qui n'est pas conservée pour le moment, mais vous pouvez exécuter une requête SQL par dessus. si vous voulez le sauvegarder, vous pouvez soit persister, soit utiliser saveAsTable pour le sauvegarder.

nous lisons d’abord les données au format csv puis les convertissons en trames de données et créons une vue temporaire

Lecture de données au format csv

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

imprimer le schéma

data.printSchema

 SchemaOfTable

data.createOrReplaceTempView("Data")

Maintenant, nous pouvons exécuter des requêtes SQL sur la vue de table que nous venons de créer

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

 enter image description here

6
RajenJangam

SparkSQl prend en charge les programmes d’écriture utilisant l’API Dataset et Dataframe, ainsi que le support de SQL.

Afin de prendre en charge Sql sur DataFrames, il faut tout d’abord une définition de table avec les noms de colonne. Si le système est créé, le métastore Hive obtiendra beaucoup de tables inutiles, car Spark-Sql réside nativement sur Hive. Ainsi, il créera une vue temporaire, temporairement disponible dans Hive et utilisée comme toute autre table Hive, une fois le contexte Spark arrêté, elle sera supprimée.

Pour créer la vue, le développeur a besoin d'un utilitaire appelécreateOrReplaceTempView

0
Sainagaraju Vaduka