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?
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:
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
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
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
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