PySparkQuay lại bảng thuật ngữ Dùng thử Databricks miễn phí Show
PySpark là gì?Apache Spark được viết bằng ngôn ngữ lập trình Scala. PySpark đã được phát hành để hỗ trợ sự cộng tác của Apache Spark và Python, nó thực sự là API Python cho Spark. Ngoài ra, PySpark, giúp bạn giao tiếp với Bộ dữ liệu phân tán đàn hồi (RDD) bằng ngôn ngữ lập trình Apache Spark và Python. Điều này đã đạt được bằng cách tận dụng thư viện Py4j. Py4J là một thư viện phổ biến được tích hợp trong PySpark và cho phép python giao tiếp động với các đối tượng JVM. PySpark có khá nhiều thư viện để viết các chương trình hiệu quả. Hơn nữa, có nhiều thư viện bên ngoài cũng tương thích. Dưới đây là một số trong số họTia lửa SQLThư viện PySpark để áp dụng phân tích giống như SQL trên một lượng lớn dữ liệu có cấu trúc hoặc bán cấu trúc. Chúng tôi cũng có thể sử dụng các truy vấn SQL với Spark SQL. Nó cũng có thể được kết nối với Apache Hive. HiveQL cũng có thể được áp dụng. PySparkSQL là một trình bao bọc trên lõi PySpark. PySparkSQL đã giới thiệu DataFrame, một biểu diễn dạng bảng của dữ liệu có cấu trúc tương tự như bảng từ hệ thống quản lý cơ sở dữ liệu quan hệMLlibMLlib là một trình bao bọc trên PySpark và nó là thư viện máy học (ML) của Spark. Thư viện này sử dụng kỹ thuật xử lý song song dữ liệu để lưu trữ và làm việc với dữ liệu. API học máy do thư viện MLlib cung cấp khá dễ sử dụng. MLlib hỗ trợ nhiều thuật toán học máy để phân loại, hồi quy, phân cụm, lọc cộng tác, giảm kích thước và các nguyên tắc tối ưu hóa cơ bảnkhung đồ thịGraphFrames là một thư viện xử lý biểu đồ có mục đích cung cấp một bộ API để thực hiện phân tích biểu đồ một cách hiệu quả, sử dụng lõi PySpark và PySparkSQL. Nó được tối ưu hóa cho tính toán phân tán nhanh. Ưu điểm của việc sử dụng PySpark. • Python rất dễ học và triển khai. • Nó cung cấp API đơn giản và toàn diện. • Với Python, khả năng đọc mã, bảo trì và mức độ quen thuộc tốt hơn nhiều. • Nó có các tùy chọn khác nhau để trực quan hóa dữ liệu, điều khó sử dụng Scala hoặc Java.Tài nguyên bổ sung
Quay lại bảng thuật ngữ Nếu bạn giống tôi, bạn đã nghe nói về một công nghệ nghe có vẻ lạ mắt có tên là Spark và muốn kiểm tra dũng khí viết mã của mình để xem liệu bạn có thể thêm một công cụ khác vào bộ công cụ khoa học dữ liệu của mình không. Hy vọng rằng bạn không hoàn toàn giống tôi vì trong trường hợp của tôi, tôi đã nhanh chóng đụng phải bức tường cài đặt, rồi bức tường thuật ngữ, rồi bức tường khái niệm, và bốn giờ sau, tôi đã không viết được một dòng mã nào. Và vì vậy, sau nhiều giờ lùng sục trên mạng và nhiều thứ được gọi là “hướng dẫn cho người mới bắt đầu” mà tôi không muốn đề cập đến, tôi quyết định viết một “hướng dẫn của người Neanderthal” để hy vọng giúp bạn tránh khỏi những rắc rối mà tôi đã phải chịu đựng Tại sao nên đọc Hướng dẫn này? Ngay cả khi tìm kiếm nhanh trực tuyến các tài liệu học tập trên Spark cũng sẽ khiến bạn ngập trong tài liệu, các khóa học trực tuyến (nhiều trong số đó không hề rẻ) và một loạt các tài nguyên khác. Theo kinh nghiệm của tôi, phần lớn trong số này cho rằng tôi biết quá nhiều về điện toán phân tán (chẳng hạn như giả sử tôi biết điện toán phân tán có nghĩa là gì) hoặc họ cung cấp thông tin cơ bản hoặc cấp cao mà không giúp tôi hiểu cách thực sự triển khai bất kỳ thứ gì trong Spark Với ý nghĩ đó, trong hướng dẫn này, tôi cố gắng hết sức để giải thích một khái niệm hoặc hướng dẫn bạn đến một nơi khác bằng một lời giải thích, tất cả đều nhằm mục đích giúp bạn viết mã Spark nhanh nhất có thể. Bởi vì tôi cố gắng làm điều này cho càng nhiều chủ đề liên quan đến Spark càng tốt, vui lòng tham khảo nếu bạn đã nắm vững một chủ đề cụ thể. Tôi cũng sẽ cố gắng để lại cho bạn các liên kết đến các tài nguyên mà tôi thấy hữu ích khi tìm hiểu về Spark Đây là cấu trúc của hướng dẫn. Tôi bắt đầu bằng cách giải thích một số thuật ngữ và khái niệm chính để chúng ta có thể thống nhất với phần còn lại của tài liệu và cũng để hạ thấp rào cản truy cập vào các tài nguyên bên ngoài trên Spark mà bạn sẽ tìm thấy ở đây và các nơi khác. Tiếp theo, tôi hướng dẫn cách tải phiên bản Spark đang hoạt động trên máy của bạn bằng Google Colab. Và cuối cùng, tôi xem xét một trường hợp sử dụng để chứng minh cách PySpark thực sự được triển khai và lần đầu tiên vượt qua một vấn đề ví dụ trông như thế nào Bạn sẽ học được gì
Thuật ngữ và khái niệm chính Dưới đây là danh sách các thuật ngữ và khái niệm khác nhau sẽ hữu ích khi bạn tìm hiểu sâu về thế giới Spark tia lửa là gìNếu bạn đã tìm kiếm "Spark là gì" trên Google, thì có khả năng bạn gặp phải mô tả sau đây hoặc đại loại như vậy. “Spark là một công cụ xử lý dữ liệu phân tán có mục đích chung”. Không có nền tảng về Spark hoặc bất kỳ sự quen thuộc nào với ý nghĩa của các thuật ngữ đó, định nghĩa đó khá vô ích. Vì vậy, hãy phá vỡ nó
(Truyện từ xkcd) Đọc thêm - Giới thiệu về điện toán phân tán (đọc 8 phút)
Đọc thêm — Công cụ xử lý được giải thích và so sánh (~10 phút đọc)
Đọc thêm - Hướng dẫn 5 phút để hiểu tầm quan trọng của Spark (có thể giống như ~ 10 phút đọc) Thuật ngữ điện toán phân tán
Đọc thêm - Giải thích về phân vùng dữ liệu (đọc 2 phút)
Đọc thêm - Khả năng chịu lỗi của Spark như thế nào (~1 phút đọc)
Đọc thêm - Đánh giá lười biếng là gì (đọc 4 phút) điều khoản tia lửa
Đọc thêm - So sánh RDD, DataFrames và DataSets (~5 phút đọc)
Đọc thêm — Tài liệu chuyển đổi hữu ích (~2 phút đọc) Đọc thêm — Tài liệu chuyên sâu hơn (đọc 5–10 phút; Chuyển đổi trong nửa đầu)
Đọc thêm — Tài liệu hành động hữu ích (~1 phút đọc)
Đọc thêm — (~2 phút đọc)
Đọc thêm - Tổng quan về Chế độ cụm từ Spark API (~3 phút đọc) Phew bạn đã thông qua tất cả các thuật ngữ và khái niệm. Bây giờ chúng ta hãy bắt tay vào thực hiện cài đặt tia lửa Tiêu đề đó có thể gây nhầm lẫn một chút, bởi vì, nói đúng ra, hướng dẫn này sẽ không chỉ cho bạn cách cài đặt Apache Spark. Cài đặt Spark có thể là một điều khó khăn. Đầu tiên, việc viết các ứng dụng Spark có thể được thực hiện bằng nhiều ngôn ngữ và mỗi ngôn ngữ được cài đặt hơi khác nhau. API cơ bản cho Spark được viết bằng Scala nhưng PySpark là API vượt trội để triển khai trong Python. Đối với các ứng dụng khoa học dữ liệu, việc sử dụng PySpark và Python được khuyến nghị rộng rãi hơn Scala, vì nó tương đối dễ triển khai hơn. Và vì vậy, thay vì cài đặt PySpark, hướng dẫn này sẽ chỉ cho bạn cách chạy nó trong Google Colab Google ColabKhi tôi cố gắng chạy PySpark trên máy tính của mình, tôi liên tục nhận được các hướng dẫn mâu thuẫn về nơi tải xuống (có thể tải xuống từ spark. apache. org hoặc pip được cài đặt chẳng hạn), chạy nó trong cái gì (nó có thể chạy trong Jupyter Notebooks hoặc trong shell pyspark gốc trong dòng lệnh) và có rất nhiều lệnh bash khó hiểu được rải khắp nơi. Là một nhà phân tích dữ liệu, phản ứng của tôi đối với các lệnh bash không phải là cài đặt pip nói chung là sự pha trộn giữa ghê tởm và tuyệt vọng, vì vậy tôi đã chuyển sang Google Colab Google Colab là một sổ ghi chép python tương tác thực sự mạnh mẽ (. ipynb) có rất nhiều thư viện khoa học dữ liệu được cài đặt sẵn. Để biết thêm thông tin về nó là gì và cách chạy nó, hãy xem bài viết siêu hữu ích này (8 phút đọc) Sau khi bạn đã có sổ tay Colab, để chạy Spark, bạn phải chạy khối mã sau (tôi biết đó không phải lỗi của tôi, nhưng tôi xin lỗi vì độ xấu của nó) !apt-get install openjdk-8-jdk-headless -qq > /dev/null
Về cơ bản, những gì khối mã này thực hiện là tải xuống đúng phiên bản Java (Spark sử dụng một số Java) và Spark, đặt PATH cho các phiên bản đó và khởi chạy Spark trong sổ ghi chép của bạn Nếu bạn muốn sử dụng Spark trên một nền tảng khác ngoài Colab, thì đây là những hướng dẫn hữu ích nhất mà tôi tìm thấy (theo thứ tự hữu ích), hy vọng một trong số đó có thể giúp bạn tiếp tục Tài nguyên cài đặt— Bắt đầu với PySpark và Jupyter Mã hóa trong PySpark Vì chúng tôi muốn làm việc với dữ liệu cột, nên chúng tôi sẽ sử dụng DataFrames là một phần của Spark SQL
Định cấu hình SparkSessionĐiểm vào để sử dụng Spark SQL là một đối tượng có tên là from google.colab import files 2. Nó khởi tạo Ứng dụng Spark mà tất cả mã cho Phiên đó sẽ chạy trên đófrom pyspark.sql import SparkSession
Kiểm tra Builder API để biết thêm tùy chọn khi xây dựng một from google.colab import files 2Đang tải dữ liệuĐể mở một tệp cục bộ trên Google Colab, bạn cần chạy đoạn mã sau. Đoạn mã này sẽ nhắc bạn chọn một tệp từ máy tính của mình from google.colab import files Đối với hướng dẫn này, chúng tôi sẽ làm việc với bộ dữ liệu về doanh số trò chơi điện tử từ Kaggle. Nó có thể được tìm thấy ở đây Bây giờ hãy tải dữ liệu của chúng tôi vào Spark DataFrame bằng hàm data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 1. (Tôi đã rút ngắn tên tệp cho ngắn gọn)data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True)
Khám phá dữ liệuBây giờ, hãy chuyển sang tìm hiểu cách chúng ta có thể làm quen hơn với dữ liệu của mình Điều đầu tiên chúng ta có thể làm là kiểm tra hình dạng của DataFrame của chúng ta. Không giống như Pandas, không có phương pháp chuyên dụng nào cho việc này nhưng chúng ta có thể sử dụng data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 2 và data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 3 để tự lấy thông tindata.count(), len(data.columns)>>> (16719, 16) Phương thức data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 2 trả về số hàng trong DataFrame và data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 5 trả về danh sách tên cột
Xem khung dữ liệu data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 6data.show(5) Đầu ra từ dữ liệu. hiển thị(5)Như bạn có thể thấy, việc chạy data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 7 đã hiển thị 5 hàng đầu tiên của Khung dữ liệu của chúng tôi, cùng với tiêu đề. Gọi data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 6 không có tham số sẽ trả về 20 bản ghi đầu tiênHãy xem dữ liệu của chúng tôi bao gồm những gì bằng cách sử dụng. Phương pháp data = spark.read.csv('Video_Games_Sales.csv',inferSchema=True, header=True) 9 (bạn có thể thay thế bằng phương pháp data.count(), len(data.columns)>>> (16719, 16)0) data.printSchema() Đầu ra từ dữ liệu. printSchema()Một số điểm đáng chú ý từ đầu ra này là Year_of_Release và User_Score có một loại chuỗi, mặc dù chúng là số. Nó cũng cho chúng ta biết rằng mỗi cột cho phép các giá trị null có thể nhìn thấy trong 5 hàng đầu tiên Chúng tôi cũng có thể chọn lọc những cột mà chúng tôi muốn hiển thị bằng phương thức data.count(), len(data.columns)>>> (16719, 16)1. Hãy chỉ xem Tên, Nền tảng, User_Score và User_Count data.select("Name","Platform","User_Score","User_Count") \ Đầu ra từ dữ liệu. lựa chọn(). chỉ()Bao gồm tham số data.count(), len(data.columns)>>> (16719, 16)2 điều chỉnh kích thước của các cột để ngăn các giá trị bị cắt Tổng hợp Thống kê/Thông tin data.count(), len(data.columns)>>> (16719, 16)3 để lấy số liệu thống kê tóm tắt về các cột mà chúng tôi chọn data.describe(["User_Score","User_Count"]).show() Đầu ra từ dữ liệu. diễn tả(). chỉ()Một số điểm đáng chú ý từ đầu ra này là dường như có một giá trị “tbd” lạ trong cột User_Score. Số lượng cho User_Score cũng cao hơn User_Count nhưng thật khó để biết liệu đó có phải là do thực sự có nhiều giá trị hơn trong User_Score hay nếu các giá trị “tbd” đang tăng số lượng một cách giả tạo. Chúng ta sẽ tìm hiểu cách lọc những giá trị đó sau Chúng tôi cũng có thể muốn nhận một số thông tin về loại nền tảng nào trong cột Nền tảng và cách chúng được phân phối. Chúng ta có thể sử dụng data.count(), len(data.columns)>>> (16719, 16)4 cho việc này và sắp xếp nó bằng cách sử dụng data.count(), len(data.columns)>>> (16719, 16)5 data.groupBy("Platform") \ Đầu ra từ dữ liệu. nhómBy(). đặt bởi(). chỉ()Ở đây chúng tôi đang xem xét 10 nền tảng thường xuyên nhất. Chúng tôi có thể nói bộ dữ liệu này khá cũ vì tôi không thấy PS4 ở đâu cả 🤔 Lọc khung dữ liệu data.count(), len(data.columns)>>> (16719, 16)6 from pyspark.sql import SparkSession 0data.count(), len(data.columns)>>> (16719, 16)7 trả về True cho bất kỳ bản ghi nào không có giá trị null trong User_Score hoặc User_Count. data.count(), len(data.columns)>>> (16719, 16)8 trả về True cho bất kỳ bản ghi nào không có “tbd” trong User_Score Chúng tôi có thể kiểm tra lại xem bộ lọc của chúng tôi có hoạt động hay không bằng cách xây dựng lại các hình ảnh trực quan hóa trước đó của chúng tôi Số liệu thống kê tóm tắt được xây dựng lại và DataFrame với các giá trị được lọc raĐó là đủ Khám phá dữ liệu để bắt đầu, bây giờ hãy xây dựng một mô hình Xây dựng mô hình trong PySparkXây dựng các mô hình trong PySpark trông hơi khác so với những gì bạn có thể đã quen và bạn sẽ thấy các thuật ngữ như Transformer, Estimator và Param. Hướng dẫn này sẽ không đi sâu vào ý nghĩa của các thuật ngữ đó nhưng bên dưới là liên kết dẫn đến mô tả ngắn gọn về ý nghĩa của chúng Đọc thêm — Học máy trong Spark (~5–10 phút đọc) Cài đặt Trước tiên, hãy mã hóa lại tất cả các yếu tố dự đoán của chúng ta thành Nhân đôi (tôi thấy rằng điều này đã loại bỏ một số lỗi thực sự nghiêm trọng sau này) from pyspark.sql import SparkSession 1Chúng tôi sử dụng phương pháp data.count(), len(data.columns)>>> (16719, 16)9, phương pháp này tạo cột mới hoặc thay thế cột đã tồn tại. Vì vậy, ví dụ, cột Year_of_Release được thay thế bằng một phiên bản của chính nó đã được chuyển thành gấp đôi VectorAssembler data.show(5) 0from pyspark.sql import SparkSession 2Ở đây, chúng tôi đã phác thảo những tính năng mà chúng tôi muốn mô hình của mình sử dụng làm công cụ dự đoán để data.show(5) 0 có thể lấy các cột đó và chuyển đổi chúng thành một cột duy nhất (được đặt tên là "công cụ dự đoán") chứa tất cả dữ liệu mà chúng tôi muốn dự đoán bằngfrom pyspark.sql import SparkSession 3Đầu ra từ VectorAssembler. biến đổi(). cộtĐiều mà data.show(5) 2 làm là tạo một Khung dữ liệu mới với một cột mới ở cuối trong đó mỗi hàng chứa danh sách tất cả các tính năng mà chúng tôi đã đưa vào tham số data.show(5) 3 khi chúng tôi tạo trình biên dịch chương trìnhBước cuối cùng để dữ liệu của chúng tôi sẵn sàng được sử dụng trong một mô hình là tự thu thập cột dự đoán mới mà chúng tôi vừa tạo và User_Score (biến mục tiêu của chúng tôi) trong DataFrame from pyspark.sql import SparkSession 4Dữ liệu cuối cùng chúng tôi sẽ sử dụng để xây dựng một mô hìnhTiếp theo là tách data.show(5) 4 thành tập huấn luyện và kiểm trafrom pyspark.sql import SparkSession 5đào tạo người mẫu from pyspark.sql import SparkSession 6Sau khi nhập data.show(5) 5 từ data.show(5) 6, chúng tôi xây dựng một biến hồi quy và chúng tôi xác định rằng nó sẽ tìm kiếm một cột có tên là “bộ dự báo” làm các đặc điểm của mô hình và một cột có tên “User_Score” làm nhãn của mô hình. Tiếp theo, chúng tôi đào tạo nó với data.show(5) 7 và cuối cùng đưa ra dự đoán với data.show(5) 8Chúng ta có thể truy cập các tham số của mô hình bằng đoạn mã sau from pyspark.sql import SparkSession 7Chúng tôi cũng có thể xem các dự đoán cuối cùng mà mô hình của chúng tôi đã thực hiện from pyspark.sql import SparkSession 8dự đoán mô hìnhĐối tượng có tên là “pred” là một đối tượng LinearRegressionSummary và do đó, để truy xuất DataFrame với các dự đoán, chúng tôi gọi data.show(5) 9Đánh giá mô hình data.printSchema() 0 được xây dựng như thế nàyfrom pyspark.sql import SparkSession 9Hãy tính toán một số thống kê cho mô hình from google.colab import files 0nào trả về from google.colab import files 1Từ đó, chúng ta có thể giải thích rằng mô hình của chúng ta có xu hướng khoảng 1. Giảm 125 điểm xếp hạng so với User_Score thực tế (theo rmse). Giá trị r² cho chúng tôi biết rằng các yếu tố dự đoán trong mô hình của chúng tôi có thể chiếm dưới 40% tổng số biến thiên trong User_Score. Đây chỉ là cái nhìn đầu tiên và tôi khuyên bạn nên tìm hiểu các thông số và tính năng của mô hình để thực hành thêm Đọc thêm - Ví dụ mã chi tiết về hồi quy tuyến tính (~ hơn 20 phút để xem qua toàn bộ nội dung) Đây chỉ là phần nổi của tảng băng chìm về loại mô hình bạn có thể thực hiện trong PySpark, nhưng tôi hy vọng hướng dẫn này đã trang bị cho bạn đủ kiến thức để đặt chân vào cánh cửa của Dữ liệu lớn Phần kết luậnỒ. Đạo cụ cho bạn nếu bạn đã đi đến cuối cùng. Bạn đã tiếp xúc với rất nhiều khái niệm mới, từ thuật ngữ của điện toán phân tán và Spark, đến triển khai các kỹ thuật mô hình hóa và khám phá dữ liệu trong PySpark. Tôi hy vọng rằng hướng dẫn này có thể là tài nguyên cho bạn khi bạn tiếp tục làm việc với Spark Tôi có thể viết Python trong PySpark không?Với PySpark, bạn có thể viết Python và các lệnh giống SQL để thao tác và phân tích dữ liệu trong môi trường xử lý phân tán.
Làm cách nào để kết nối Spark bằng Python?Các ứng dụng PySpark độc lập nên được chạy bằng cách sử dụng tập lệnh bin/pyspark , tập lệnh này sẽ tự động định cấu hình môi trường Java và Python bằng cách sử dụng cài đặt trong conf/spark-env. sh hoặc. cmd. Tập lệnh tự động thêm gói bin/pyspark vào PYTHONPATH.
Làm cách nào để sử dụng Python trong vỏ Spark?Chuyển đến thư mục Cài đặt Spark từ dòng lệnh và nhập bin/pyspark rồi nhấn enter , thao tác này sẽ khởi chạy trình bao pyspark và cung cấp cho bạn lời nhắc tương tác với Spark bằng ngôn ngữ Python. Nếu bạn đã đặt Spark trong PATH thì chỉ cần nhập pyspark vào dòng lệnh hoặc thiết bị đầu cuối (người dùng mac).
Tôi có nên sử dụng Python hoặc Scala cho Spark không?Nếu bạn muốn làm việc trong một dự án nhỏ hơn với những lập trình viên ít kinh nghiệm hơn, thì Python là lựa chọn thông minh . Tuy nhiên, nếu bạn có một dự án lớn cần nhiều tài nguyên và xử lý song song, thì Scala là cách tốt nhất để thực hiện. |