Ngoài việc tạo bảng, Spark có thể tạo chế độ xem trên đầu bảng hiện có. Chế độ xem có thể là toàn cầu [hiển thị trên tất cả các SparkSession
trên một cụm nhất định] hoặc theo phạm vi phiên [chỉ hiển thị cho một SparkSession
duy nhất] và chúng là tạm thời. chúng biến mất sau khi ứng dụng Spark của bạn kết thúc
Tạo dạng xem có cú pháp tương tự như tạo bảng trong cơ sở dữ liệu. Khi bạn tạo một dạng xem, bạn có thể truy vấn nó giống như một bảng. Sự khác biệt giữa dạng xem và bảng là dạng xem không thực sự chứa dữ liệu;
Bạn có thể tạo dạng xem từ bảng hiện có bằng SQL. Ví dụ: nếu bạn chỉ muốn làm việc trên tập hợp con của tập hợp dữ liệu về sự chậm trễ chuyến bay của Hoa Kỳ với các sân bay gốc của New York [JFK] và San Francisco [SFO], thì các truy vấn sau đây sẽ tạo ra các chế độ xem tạm thời và tạm thời trên toàn cầu chỉ bao gồm lát cắt đó
-- In SQL
CREATE
OR
REPLACE
GLOBAL
TEMP
VIEW
us_origin_airport_SFO_global_tmp_view
AS
SELECT
date
,
delay
,
origin
,
destination
from
us_delay_flights_tbl
WHERE
origin
=
'SFO'
;
CREATE
OR
REPLACE
TEMP
VIEW
us_origin_airport_JFK_tmp_view
AS
SELECT
date
,
delay
,
origin
,
destination
from
us_delay_flights_tbl
WHERE
origin
=
'JFK'
Bạn có thể thực hiện điều tương tự với API DataFrame như sau
# In Python
df_sfo
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'SFO'
"]
df_jfk
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'JFK'
"]
# Create a temporary and global temporary view
df_sfo
.
createOrReplaceGlobalTempView
[
"us_origin_airport_SFO_global_tmp_view"
]
df_jfk
.
createOrReplaceTempView
[
"us_origin_airport_JFK_tmp_view"
]
Khi bạn đã tạo các dạng xem này, bạn có thể đưa ra các truy vấn đối với chúng giống như đối với một bảng. Hãy nhớ rằng khi truy cập chế độ xem tạm thời toàn cầu, bạn phải sử dụng tiền tố
1, vì Spark tạo chế độ xem tạm thời toàn cầu trong cơ sở dữ liệu tạm thời toàn cầu có tên là# In Python
df_sfo
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'SFO'
"]
df_jfk
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'JFK'
"]
# Create a temporary and global temporary view
df_sfo
.
createOrReplaceGlobalTempView
[
"us_origin_airport_SFO_global_tmp_view"
]
df_jfk
.
createOrReplaceTempView
[
"us_origin_airport_JFK_tmp_view"
]
0. Ví dụ# In Python
df_sfo
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'SFO'
"]
df_jfk
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'JFK'
"]
# Create a temporary and global temporary view
df_sfo
.
createOrReplaceGlobalTempView
[
"us_origin_airport_SFO_global_tmp_view"
]
df_jfk
.
createOrReplaceTempView
[
"us_origin_airport_JFK_tmp_view"
]
-- In SQL
SELECT
*
FROM
global_temp
.
us_origin_airport_SFO_global_tmp_view
Ngược lại, bạn có thể truy cập chế độ xem tạm thời bình thường mà không cần tiền tố
0# In Python
df_sfo
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'SFO'
"]
df_jfk
=
spark
.
sql
[
"SELECT date, delay, origin, destination FROM
us_delay_flights_tbl
WHERE
origin
=
'JFK'
"]
# Create a temporary and global temporary view
df_sfo
.
createOrReplaceGlobalTempView
[
"us_origin_airport_SFO_global_tmp_view"
]
df_jfk
.
createOrReplaceTempView
[
"us_origin_airport_JFK_tmp_view"
]
-- In SQL
SELECT
*
FROM
us_origin_airport_JFK_tmp_view
// In Scala/Python
spark
.
read
.
table
[
"us_origin_airport_JFK_tmp_view"
]
// Or
spark
.
sql
[
"SELECT * FROM us_origin_airport_JFK_tmp_view"
]
Bạn cũng có thể thả một khung nhìn giống như bạn làm với một bảng
-- In SQL
DROP
VIEW
IF
EXISTS
us_origin_airport_SFO_global_tmp_view
;
DROP
VIEW
IF
EXISTS
us_origin_airport_JFK_tmp_view
// In Scala/Python
spark
.
catalog
.
dropGlobalTempView
[
"us_origin_airport_SFO_global_tmp_view"
]
spark
.
catalog
.
dropTempView
[
"us_origin_airport_JFK_tmp_view"
]
Chế độ xem tạm thời so với chế độ xem tạm thời toàn cầu
Sự khác biệt giữa chế độ xem tạm thời và chế độ xem tạm thời toàn cầu là rất nhỏ, nó có thể là nguyên nhân gây nhầm lẫn nhẹ giữa các nhà phát triển mới sử dụng Spark. Chế độ xem tạm thời được gắn với một SparkSession
duy nhất trong ứng dụng Spark. Ngược lại, chế độ xem tạm thời toàn cầu hiển thị trên nhiều SparkSession
trong ứng dụng Spark. Có, bạn có thể tạo nhiều SparkSession
trong một ứng dụng Spark duy nhất—điều này có thể hữu ích, chẳng hạn như trong trường hợp bạn muốn truy cập [và kết hợp] dữ liệu từ hai SparkSession
khác nhau không chia sẻ cùng cấu hình kho lưu trữ Hive