2017-05-16 5 views

答えて

11

createOrReplaceTempViewは、スパーク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コールの後で完全にキャッシュされます。 (永続的なテーブルとの比較)spark createOrReplaceTempView vs createGlobalTempView

関連する引用:

Cached nums temp view/table

SO関連:ここではそれがキャッシュされています証拠だ「createOrReplaceTempViewコマンドとは異なり、saveAsTableは、データフレームの内容を具体ポインタを作成します。 Hiveメタストア内のデータに追加する必要があります。 https://spark.apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables

注から:createOrReplaceTempView以前registerTempTable

+0

を作成したテーブルビューが、これは 'view'一時テーブルを作成していますか?そして、 'view'はSparkのハイブテーブルのような特定の名前を持っていますか? –

+0

はい、実際にはテーブルですが、ファイルにはマテリアライズされていないため、評価する必要があります。ハイブテーブル(生のSQLクエリなど)と同じように、ビューを使用することができます。 – Garren

+0

従来の一時テーブルとは異なり、一時ビューはメモリにも全くマテリアライズされません。 SQLのデータにアクセスするのに便利ですが、アクセスされるたびにそのステートメントを評価する必要があることを理解しています – Garren

3

たCreateOrReplaceTempViewが、それはこの時点でpresistantされていませんが、あなたはその上にSQLクエリを実行することができ、メモリ上のテーブルの一時的なビューを作成します。それを保存したい場合は、saveAsTableを使用して保存するか保存します。

まずCSV形式で

読み取りデータをCSV形式のデータを読み込み、データフレームに変換し、一時ビューを作成

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

スキーマを

印刷data.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

関連する問題