Pyspark SQL cung cấp các phương thức để đọc tệp Parquet vào DataFrame và ghi DataFrame vào tệp Parquet, hàm
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
4 từ
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
5 và
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
6 được sử dụng để đọc và ghi/tạo tệp Parquet tương ứng. Các tệp sàn gỗ duy trì lược đồ cùng với dữ liệu do đó nó được sử dụng để xử lý tệp có cấu trúcTrong bài viết này, tôi sẽ giải thích cách đọc và ghi tệp sàn gỗ, đồng thời giải thích cách phân vùng dữ liệu và truy xuất dữ liệu được phân vùng với sự trợ giúp của SQL Dưới đây là các câu lệnh đơn giản về cách viết và đọc tệp sàn gỗ trong PySpark mà tôi sẽ giải thích chi tiết trong các phần sau
df.write.parquet("/tmp/out/people.parquet")
parDF1=spark.read.parquet("/temp/out/people.parquet")
Trước đây, tôi đã giải thích chi tiết, trước tiên hãy hiểu Tệp Parquet là gì và những ưu điểm của nó so với CSV, JSON và các định dạng tệp văn bản khác Tập tin sàn gỗ là gì?Tệp Apache Parquet là định dạng lưu trữ dạng cột có sẵn cho bất kỳ dự án nào trong hệ sinh thái Hadoop, bất kể lựa chọn khung xử lý dữ liệu, mô hình dữ liệu hay ngôn ngữ lập trình Thuận lợiTrong khi truy vấn lưu trữ dạng cột, nó sẽ bỏ qua dữ liệu không liên quan rất nhanh, giúp thực hiện truy vấn nhanh hơn. Kết quả là các truy vấn tổng hợp tiêu tốn ít thời gian hơn so với cơ sở dữ liệu hướng hàng Nó có thể hỗ trợ các cấu trúc dữ liệu lồng nhau nâng cao Sàn gỗ hỗ trợ các tùy chọn nén và lược đồ mã hóa hiệu quả Pyspark SQL cung cấp hỗ trợ cho cả đọc và ghi các tệp Parquet tự động ghi lại lược đồ của dữ liệu gốc, Nó cũng giảm trung bình 75% dung lượng lưu trữ dữ liệu. Pyspark theo mặc định hỗ trợ Parquet trong thư viện của nó, do đó chúng tôi không cần thêm bất kỳ thư viện phụ thuộc nào Ví dụ Pyspark sàn gỗ ApacheVì chúng tôi không có tệp sàn gỗ, hãy làm việc với việc viết sàn gỗ từ DataFrame. Đầu tiên, tạo Khung dữ liệu Pyspark từ danh sách dữ liệu bằng phương pháp
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
7
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
ví dụ trên, nó tạo một DataFrame với các cột tên, tên đệm, họ, dob, giới tính, tiền lương Pyspark Ghi DataFrame sang định dạng tệp ParquetBây giờ, hãy tạo một tệp sàn gỗ từ PySpark DataFrame bằng cách gọi hàm
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
4 của lớp
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
6. Khi bạn ghi một DataFrame vào tệp lát gỗ, nó sẽ tự động giữ nguyên tên cột và kiểu dữ liệu của chúng. Mỗi tệp phần mà Pyspark tạo có. phần mở rộng tập tin sàn gỗ. Dưới đây là ví dụ,
df.write.parquet("/tmp/output/people.parquet")
Pyspark Đọc tệp Parquet vào DataFramePyspark cung cấp một phương thức
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
4 trong lớp
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
5 để đọc tệp sàn gỗ vào khung dữ liệu. Dưới đây là một ví dụ về việc đọc tệp sàn gỗ vào khung dữ liệu
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
1Nối hoặc ghi đè tệp Parquet hiện cóSử dụng chế độ lưu nối thêm, bạn có thể nối thêm khung dữ liệu vào tệp sàn gỗ hiện có. Trong trường hợp ghi đè lên, hãy sử dụng chế độ lưu ghi đè
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
2Thực thi truy vấn SQL DataFramePyspark Sql cung cấp để tạo các chế độ xem tạm thời trên các tệp sàn gỗ để thực hiện các truy vấn sql. Các chế độ xem này khả dụng cho đến khi chương trình của bạn tồn tại
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
3Tạo bảng trên tệp ParquetBây giờ, hãy xem qua việc thực thi các truy vấn SQL trên tệp sàn gỗ. Để thực hiện các truy vấn sql, hãy tạo một chế độ xem hoặc bảng tạm thời trực tiếp trên tệp sàn gỗ thay vì tạo từ DataFrame
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
4Ở đây, chúng tôi đã tạo chế độ xem tạm thời
df.write.parquet("/tmp/output/people.parquet")
2 từ tệp “
df.write.parquet("/tmp/output/people.parquet")
3”. Điều này mang lại kết quả sau
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
7Tạo tập tin phân vùng ParquetKhi chúng tôi thực hiện một truy vấn cụ thể trên bảng PERSON, nó sẽ quét qua tất cả các hàng và trả lại kết quả. Điều này tương tự như việc thực hiện truy vấn cơ sở dữ liệu truyền thống. Trong PySpark, chúng tôi có thể cải thiện việc thực thi truy vấn theo cách được tối ưu hóa bằng cách thực hiện các phân vùng trên dữ liệu bằng phương pháp pyspark
df.write.parquet("/tmp/output/people.parquet")
4. Sau đây là ví dụ về partitionBy()
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
9Khi bạn kiểm tra người2. tệp sàn gỗ, nó có hai phân vùng "giới tính" theo sau là "lương" bên trong Truy xuất từ tệp Parquet được phân vùngVí dụ dưới đây giải thích về việc đọc tệp sàn gỗ được phân vùng vào DataFrame với giới tính=M
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
0Đầu ra cho ví dụ trên được hiển thị bên dưới
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
0Tạo một bảng trên tệp Parquet được phân vùngỞ đây, tôi đang tạo một bảng trên tệp sàn gỗ được phân vùng và thực hiện một truy vấn thực thi nhanh hơn bảng không có phân vùng, do đó cải thiện hiệu suất
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
1Dưới đây là đầu ra
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
2Ví dụ hoàn chỉnh về PySpark đọc và ghi tệp Parquet
data =[("James ","","Smith","36636","M",3000),
("Michael ","Rose","","40288","M",4000),
("Robert ","","Williams","42114","M",4000),
("Maria ","Anne","Jones","39192","F",4000),
("Jen","Mary","Brown","","F",-1)]
columns=["firstname","middlename","lastname","dob","gender","salary"]
df=spark.createDataFrame(data,columns)
3Phần kết luậnChúng tôi đã học cách viết tệp Sàn gỗ từ Khung dữ liệu PySpark và đọc tệp sàn gỗ vào DataFrame và tạo chế độ xem/bảng để thực hiện các truy vấn SQL. Cũng giải thích cách thực hiện phân vùng trên tệp sàn gỗ để cải thiện hiệu suất |