web-dev-qa-db-ja.com

createOrReplaceTempViewはSparkでどのように機能しますか?

SparkおよびSpark SQLが初めてです。

SparkでcreateOrReplaceTempViewはどのように機能しますか?

オブジェクトのRDDをテーブルとして登録すると、sparkはすべてのデータをメモリに保持しますか?

27

createOrReplaceTempViewは、Spark SQLのHiveテーブルのように使用できる遅延評価された「ビュー」を作成(またはそのビュー名が既に存在する場合は置き換え)します。ビューを支えるデータセットをキャッシュしない限り、メモリにnot持続します。

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

関連SO: spark createOrReplaceTempView vs createGlobalTempView

関連する引用(永続テーブルと比較):「createOrReplaceTempViewコマンドとは異なり、saveAsTableはDataFrameのコンテンツを具体化し、Hiveメタストア内のデータへのポインターを作成します。」 from https://spark.Apache.org/docs/latest/sql-programming-guide.html#saving-to-persistent-tables

注:createOrReplaceTempViewは以前はregisterTempTableでした

45
Garren S

CreateOrReplaceTempViewは、この時点では耐えられないメモリ上にテーブルの一時ビューを作成しますが、その上で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

7
RajenDharmendra

SparkSQlは、DatasetおよびDataframe APIを使用したプログラムの作成をサポートし、sqlをサポートする必要があります。

SparkがネイティブにHiveに常駐するため、DataFrameでSqlをサポートするには、最初に列名を含むテーブル定義が必要です。また、テーブルを作成する場合、Hiveメタストアは多くの不要なテーブルを取得します。そのため、一時的にHiveで使用可能な一時ビューを作成し、Spark Context stopが削除されると、他のHiveテーブルとして使用されます。

ビューを作成するには、開発者はcreateOrReplaceTempViewというユーティリティが必要です

0