SparkおよびSpark SQLが初めてです。
SparkでcreateOrReplaceTempView
はどのように機能しますか?
オブジェクトのRDD
をテーブルとして登録すると、sparkはすべてのデータをメモリに保持しますか?
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
呼び出しの後にのみ完全にキャッシュされます。キャッシュされた証拠は次のとおりです。
関連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
でした
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
data.createOrReplaceTempView("Data")
これで、作成したテーブルビューの上でSQLクエリを実行できます。
%sql select Week as Date,Campaign Type,Engagements,Country from Data order by Date asc
SparkSQlは、DatasetおよびDataframe APIを使用したプログラムの作成をサポートし、sqlをサポートする必要があります。
SparkがネイティブにHiveに常駐するため、DataFrameでSqlをサポートするには、最初に列名を含むテーブル定義が必要です。また、テーブルを作成する場合、Hiveメタストアは多くの不要なテーブルを取得します。そのため、一時的にHiveで使用可能な一時ビューを作成し、Spark Context stopが削除されると、他のHiveテーブルとして使用されます。
ビューを作成するには、開発者はcreateOrReplaceTempView
というユーティリティが必要です