Spark là một giải pháp dữ liệu lớn đã được chứng minh là dễ dàng và nhanh hơn Hadoop MapReduce. Spark là một phần mềm mã nguồn mở được phát triển bởi phòng thí nghiệm UC Berkeley RAD vào năm 2009. Kể từ khi ra mắt công chúng vào năm 2010, Spark đã trở nên phổ biến và được sử dụng trong toàn ngành với quy mô chưa từng có
Trong kỷ nguyên Dữ liệu lớn, các học viên cần hơn bao giờ hết các công cụ nhanh và đáng tin cậy để xử lý luồng dữ liệu. Các công cụ trước đó như MapReduce được yêu thích nhưng chậm. Để khắc phục vấn đề này, Spark đưa ra một giải pháp vừa nhanh vừa đa năng. Sự khác biệt chính giữa Spark và MapReduce là Spark chạy các tính toán trong bộ nhớ sau này trên đĩa cứng. Nó cho phép truy cập và xử lý dữ liệu tốc độ cao, giảm thời gian từ hàng giờ xuống còn vài phút
PySpark là gì?
PySpark là một công cụ được tạo bởi Cộng đồng Apache Spark để sử dụng Python với Spark. Nó cho phép làm việc với RDD [Bộ dữ liệu phân tán đàn hồi] trong Python. Nó cũng cung cấp PySpark Shell để liên kết API Python với lõi Spark để khởi tạo Bối cảnh Spark. Spark là công cụ tên để hiện thực hóa điện toán cụm, trong khi PySpark là thư viện của Python để sử dụng Spark
Trong hướng dẫn PySpark dành cho người mới bắt đầu này, bạn sẽ tìm hiểu những điều cơ bản về PySpark như-
Spark hoạt động như thế nào?
Spark dựa trên công cụ tính toán, có nghĩa là nó đảm nhiệm việc lập lịch trình, phân phối và giám sát ứng dụng. Mỗi tác vụ được thực hiện trên nhiều máy công nhân khác nhau được gọi là cụm máy tính. Một cụm máy tính đề cập đến việc phân chia các nhiệm vụ. Một máy thực hiện một tác vụ, trong khi các máy khác đóng góp vào đầu ra cuối cùng thông qua một tác vụ khác. Cuối cùng, tất cả các nhiệm vụ được tổng hợp để tạo ra một đầu ra. Quản trị viên Spark cung cấp tổng quan 360 độ về các Công việc Spark khác nhau
Spark hoạt động như thế nào
Spark được thiết kế để làm việc với
- con trăn
- Java
- Scala
- SQL
Một tính năng quan trọng của Spark là số lượng lớn thư viện tích hợp sẵn, bao gồm cả MLlib dành cho máy học. Spark cũng được thiết kế để hoạt động với các cụm Hadoop và có thể đọc nhiều loại tệp, bao gồm dữ liệu Hive, CSV, JSON, dữ liệu Casandra trong số những loại khác
Tại sao nên sử dụng Spark?
Là một người thực hành dữ liệu trong tương lai, bạn nên làm quen với các thư viện nổi tiếng của python. Gấu trúc và scikit-learning. Hai thư viện này thật tuyệt vời để khám phá các bộ dữ liệu có kích thước trung bình. Các dự án học máy thông thường được xây dựng dựa trên phương pháp sau
- Nạp dữ liệu vào đĩa
- Nhập dữ liệu vào bộ nhớ của máy
- Xử lý/phân tích dữ liệu
- Xây dựng mô hình máy học
- Lưu trữ dự đoán trở lại đĩa
Vấn đề phát sinh nếu nhà khoa học dữ liệu muốn xử lý dữ liệu quá lớn đối với một máy tính. Trong những ngày đầu của khoa học dữ liệu, các học viên sẽ lấy mẫu vì không phải lúc nào cũng cần đào tạo về các tập dữ liệu khổng lồ. Nhà khoa học dữ liệu sẽ tìm một mẫu thống kê tốt, thực hiện kiểm tra độ tin cậy bổ sung và đưa ra một mô hình xuất sắc
Tuy nhiên, có một số vấn đề với điều này
- Bộ dữ liệu có phản ánh thế giới thực không?
- Dữ liệu có bao gồm một ví dụ cụ thể không?
- Mô hình có phù hợp để lấy mẫu không?
Lấy đề xuất của người dùng làm ví dụ. Người giới thiệu dựa vào việc so sánh người dùng với những người dùng khác để đánh giá sở thích của họ. Nếu người thực hành dữ liệu chỉ lấy một tập hợp con dữ liệu, thì sẽ không có một nhóm người dùng nào rất giống nhau. Người giới thiệu cần chạy trên bộ dữ liệu đầy đủ hoặc hoàn toàn không
Giải pháp là gì?
Giải pháp đã rõ ràng từ lâu, chia vấn đề thành nhiều máy tính. Tính toán song song cũng có nhiều vấn đề. Các nhà phát triển thường gặp khó khăn khi viết mã song song và cuối cùng phải giải quyết một loạt các vấn đề phức tạp xung quanh đa xử lý.
Pyspark cung cấp cho nhà khoa học dữ liệu một API có thể được sử dụng để giải quyết các vấn đề về quy trình dữ liệu song song. Pyspark xử lý sự phức tạp của đa xử lý, chẳng hạn như phân phối dữ liệu, phân phối mã và thu thập đầu ra từ các công nhân trên một cụm máy
Spark có thể chạy độc lập nhưng thường chạy trên khung tính toán cụm như Hadoop. Tuy nhiên, trong quá trình thử nghiệm và phát triển, một nhà khoa học dữ liệu có thể chạy Spark một cách hiệu quả trên hộp phát triển hoặc máy tính xách tay của họ mà không cần cụm
• Một trong những ưu điểm chính của Spark là xây dựng một kiến trúc bao gồm quản lý luồng dữ liệu, truy vấn dữ liệu liền mạch, dự đoán học máy và truy cập thời gian thực vào các phân tích khác nhau
• Spark hoạt động chặt chẽ với ngôn ngữ SQL, i. e. , Dữ liệu có cấu trúc. Nó cho phép truy vấn dữ liệu trong thời gian thực
• Công việc chính của nhà khoa học dữ liệu là phân tích và xây dựng các mô hình dự đoán. Nói tóm lại, một nhà khoa học dữ liệu cần biết cách truy vấn dữ liệu bằng SQL, tạo báo cáo thống kê và sử dụng máy học để đưa ra dự đoán. Các nhà khoa học dữ liệu dành một lượng thời gian đáng kể để làm sạch, chuyển đổi và phân tích dữ liệu. Khi bộ dữ liệu hoặc quy trình làm việc dữ liệu đã sẵn sàng, nhà khoa học dữ liệu sử dụng các kỹ thuật khác nhau để khám phá thông tin chi tiết và các mẫu ẩn. Thao tác dữ liệu phải mạnh mẽ và dễ sử dụng. Spark là công cụ phù hợp nhờ tốc độ và API phong phú
Trong hướng dẫn PySpark này, bạn sẽ học cách xây dựng bộ phân loại với các ví dụ về PySpark
Cách cài đặt PySpark với AWS
Nhóm Jupyter xây dựng hình ảnh Docker để chạy Spark hiệu quả. Dưới đây là các bước bạn có thể làm theo để cài đặt phiên bản PySpark trong AWS
Tham khảo hướng dẫn của chúng tôi về AWS và TensorFlow
Bước 1. Tạo một phiên bản
Trước hết, bạn cần tạo một thể hiện. Truy cập tài khoản AWS của bạn và khởi chạy phiên bản. Bạn có thể tăng dung lượng lưu trữ lên tới 15g và sử dụng cùng một nhóm bảo mật như trong hướng dẫn TensorFlow
Bước 2. Mở kết nối
Mở kết nối và cài đặt docker container. Để biết thêm chi tiết, hãy tham khảo hướng dẫn với TensorFlow với Docker. Lưu ý rằng, bạn cần vào đúng thư mục làm việc
Chỉ cần chạy các mã này để cài đặt Docker
sudo yum update -y sudo yum install -y docker sudo service docker start sudo user-mod -a -G docker ec2-user exit
Bước 3. Mở lại kết nối và cài đặt Spark
Sau khi mở lại kết nối, bạn có thể cài đặt image chứa PySpark
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree
Bước 4. Mở Jupyter
Kiểm tra container và tên của nó
docker ps
Khởi chạy docker với nhật ký docker theo sau là tên của docker. Chẳng hạn, docker logs zealous goldwasser
Truy cập trình duyệt của bạn và khởi chạy Jupyter. địa chỉ là http. //máy chủ cục bộ. 8888/. Dán mật khẩu được cung cấp bởi thiết bị đầu cuối
Ghi chú. nếu bạn muốn tải lên/tải xuống tệp vào máy AWS của mình, bạn có thể sử dụng phần mềm Cyberduck, https. //duck điện tử. io/
Cách cài đặt PySpark trên Windows/Mac với Conda
Sau đây là quy trình chi tiết về cách cài đặt PySpark trên Windows/Mac bằng Anaconda
Để cài đặt Spark trên máy cục bộ của bạn, một phương pháp được khuyến nghị là tạo một môi trường conda mới. Môi trường mới này sẽ cài đặt Python 3. 6, Spark và tất cả các phụ thuộc
Người dùng Mac
cd anaconda3 touch hello-spark.yml vi hello-spark.yml
Người dùng Windows
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml
Bạn có thể chỉnh sửa. tập tin yml. Thận trọng với vết lõm. Cần có hai khoảng trắng trước –
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz
Lưu nó và tạo môi trường. Phải mất một thời gian
conda env create -f hello-spark.yml
Để biết thêm chi tiết về vị trí, vui lòng xem hướng dẫn Cài đặt TensorFlow
Bạn có thể kiểm tra tất cả các môi trường được cài đặt trong máy của bạn
conda env list
Activate hello-spark
Người dùng Mac
source activate hello-spark
Người dùng Windows
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree0
Ghi chú. Bạn đã tạo một môi trường TensorFlow cụ thể để chạy các hướng dẫn trên TensorFlow. Sẽ thuận tiện hơn khi tạo một môi trường mới khác với hello-tf. Thật vô nghĩa khi quá tải hello-tf với Spark hoặc bất kỳ thư viện máy học nào khác
Hãy tưởng tượng hầu hết dự án của bạn liên quan đến TensorFlow, nhưng bạn cần sử dụng Spark cho một dự án cụ thể. Bạn có thể đặt môi trường TensorFlow cho tất cả các dự án của mình và tạo một môi trường riêng cho Spark. Bạn có thể thêm bao nhiêu thư viện trong môi trường Spark tùy thích mà không can thiệp vào môi trường TensorFlow. Khi bạn đã hoàn thành dự án của Spark, bạn có thể xóa nó mà không ảnh hưởng đến môi trường TensorFlow
bề mặt Ju
Mở Jupyter Notebook và thử xem PySpark có hoạt động không. Trong sổ ghi chép mới, dán mã mẫu PySpark sau
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree1
Nếu báo lỗi thì có thể máy bạn chưa cài Java. Trong mac, mở terminal và viết java -version, nếu có phiên bản java, hãy đảm bảo đó là 1. 8. Trong Windows, vào Ứng dụng và kiểm tra xem có thư mục Java không. Nếu có một thư mục Java, hãy kiểm tra Java 1. 8 được cài đặt. Khi viết bài này, PySpark không tương thích với Java9 trở lên
Nếu cần cài Java, bạn nghĩ link và download jdk-8u181-windows-x64. người cũ
Đối với Người dùng Mac, nên sử dụng `brew. `
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree2
Tham khảo hướng dẫn từng bước này về cách cài đặt Java
Ghi chú. Sử dụng remove để xóa hoàn toàn một môi trường
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree3
bối cảnh tia lửa
SparkContext là công cụ nội bộ cho phép kết nối với các cụm. Nếu bạn muốn chạy một hoạt động, bạn cần có SparkContext
Tạo SparkContext
Trước hết, bạn cần khởi tạo SparkContext
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree1
Bây giờ SparkContext đã sẵn sàng, bạn có thể tạo một tập hợp dữ liệu có tên RDD, Bộ dữ liệu phân tán đàn hồi. Tính toán trong RDD được tự động song song hóa trên toàn cụm
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree5
Bạn có thể truy cập vào hàng đầu tiên với take
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree6
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree7
Bạn có thể áp dụng chuyển đổi cho dữ liệu bằng hàm lambda. Trong ví dụ PySpark bên dưới, bạn trả về bình phương các số. Đó là một phép biến đổi bản đồ
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree8
## Spark docker run -v ~/work:/home/jovyan/work -d -p 8888:8888 jupyter/pyspark-notebook ## Allow preserving Jupyter notebook sudo chown 1000 ~/work ## Install tree to see our working directory next sudo yum install -y tree9
SQLContext
Một cách thuận tiện hơn là sử dụng DataFrame. SparkContext đã được đặt, bạn có thể sử dụng nó để tạo dataFrame. Bạn cũng cần khai báo SQLContext
SQLContext cho phép kết nối engine với các nguồn dữ liệu khác nhau. Nó được sử dụng để bắt đầu các chức năng của Spark SQL
docker ps0
Bây giờ trong Python hướng dẫn Spark này, hãy tạo một danh sách các bộ dữ liệu. Mỗi bộ dữ liệu sẽ chứa tên của mọi người và tuổi của họ. Cần có bốn bước
Bước 1] Tạo danh sách các bộ dữ liệu với thông tin
docker ps1
Bước 2] Xây dựng RDD
docker ps2
Bước 3] Chuyển đổi các bộ dữ liệu
docker ps3
Bước 4] Tạo ngữ cảnh DataFrame
docker ps4
Nếu bạn muốn truy cập loại của từng tính năng, bạn có thể sử dụng printSchema[]
docker ps5
Ví dụ học máy với PySpark
Bây giờ bạn đã có một ý tưởng ngắn gọn về Spark và SQLContext, bạn đã sẵn sàng xây dựng chương trình Machine learning đầu tiên của mình
Sau đây là các bước để xây dựng chương trình Machine Learning với PySpark
- Bước 1] Thao tác cơ bản với PySpark
- Bước 2] Tiền xử lý dữ liệu
- Bước 3] Xây dựng quy trình xử lý dữ liệu
- Bước 4] Xây dựng bộ phân loại. hậu cần
- Bước 5] Huấn luyện và đánh giá mô hình
- Bước 6] Điều chỉnh siêu tham số
Trong hướng dẫn Học máy PySpark này, chúng tôi sẽ sử dụng tập dữ liệu dành cho người lớn. Mục đích của hướng dẫn này là để học cách sử dụng Pyspark. Để biết thêm thông tin về tập dữ liệu, hãy tham khảo hướng dẫn này
Lưu ý rằng, tập dữ liệu không đáng kể và bạn có thể nghĩ rằng việc tính toán mất nhiều thời gian. Spark được thiết kế để xử lý một lượng dữ liệu đáng kể. Hiệu suất của Spark tăng so với các thư viện máy học khác khi bộ dữ liệu được xử lý ngày càng lớn hơn
Bước 1] Thao tác cơ bản với PySpark
Trước hết, bạn cần khởi tạo SQLContext chưa được khởi tạo
docker ps6
sau đó, bạn có thể đọc tệp cvs bằng sqlContext. đọc. csv. Bạn sử dụng inferSchema được đặt thành True để báo cho Spark tự động đoán loại dữ liệu. Theo mặc định, nó được chuyển thành Sai
docker ps7
Hãy xem kiểu dữ liệu
docker ps8
Bạn có thể xem dữ liệu với show
docker ps9
cd anaconda3 touch hello-spark.yml vi hello-spark.yml0
Nếu bạn không đặt inderShema thành True, đây là điều đang xảy ra với loại. Có tất cả trong chuỗi
cd anaconda3 touch hello-spark.yml vi hello-spark.yml1
Để chuyển đổi biến liên tục theo đúng định dạng, bạn có thể sử dụng tính năng viết lại các cột. Bạn có thể sử dụng withColumn để cho Spark biết cột nào sẽ vận hành chuyển đổi
cd anaconda3 touch hello-spark.yml vi hello-spark.yml2
Chọn cột
Bạn có thể chọn và hiển thị các hàng bằng cách chọn và tên của các tính năng. Dưới đây, tuổi và fnlwgt được chọn
cd anaconda3 touch hello-spark.yml vi hello-spark.yml3____34
Đếm theo nhóm
Nếu bạn muốn đếm số lần xuất hiện theo nhóm, bạn có thể xâu chuỗi
- nhómBy[]
- đếm[]
cùng với nhau. Trong ví dụ PySpark bên dưới, bạn đếm số hàng theo trình độ học vấn
cd anaconda3 touch hello-spark.yml vi hello-spark.yml5
cd anaconda3 touch hello-spark.yml vi hello-spark.yml6
Mô tả dữ liệu
Để lấy số liệu thống kê tóm tắt về dữ liệu, bạn có thể sử dụng description[]. Nó sẽ tính toán
- đếm
- ý tôi là
- độ lệch chuẩn
- của tôi
- tối đa
cd anaconda3 touch hello-spark.yml vi hello-spark.yml7____38
Nếu bạn muốn thống kê tóm tắt của chỉ một cột, hãy thêm tên của cột bên trong description[]
cd anaconda3 touch hello-spark.yml vi hello-spark.yml9
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml0
tính toán chéo bảng
Trong một số trường hợp, có thể thú vị khi xem số liệu thống kê mô tả giữa hai cột theo cặp. Chẳng hạn, bạn có thể đếm số người có thu nhập dưới hoặc trên 50k theo trình độ học vấn. Hoạt động này được gọi là bảng chéo
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml1
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml2
Bạn có thể thấy không ai có thu nhập trên 50k khi còn trẻ
thả cột
Có hai API trực quan để thả cột
- rơi vãi[]. Thả một cột
- rơi vãi[]. Bỏ NA
Bên dưới bạn thả cột education_num
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml3
Lọc dữ liệu
Bạn có thể sử dụng bộ lọc [] để áp dụng thống kê mô tả trong một tập hợp con dữ liệu. Chẳng hạn, bạn có thể đếm số người trên 40 tuổi
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml4
13443
Thống kê mô tả theo nhóm
Cuối cùng, bạn có thể nhóm dữ liệu theo nhóm và tính toán các hoạt động thống kê như giá trị trung bình
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml5
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml6
Bước 2] Tiền xử lý dữ liệu
Xử lý dữ liệu là một bước quan trọng trong học máy. Sau khi xóa dữ liệu rác, bạn sẽ nhận được một số thông tin chi tiết quan trọng
Chẳng hạn, bạn biết rằng tuổi không phải là một hàm tuyến tính với thu nhập. Khi mọi người còn trẻ, thu nhập của họ thường thấp hơn so với tuổi trung niên. Sau khi nghỉ hưu, một hộ gia đình sử dụng tiền tiết kiệm của họ, nghĩa là thu nhập giảm. Để chụp mẫu này, bạn có thể thêm một hình vuông vào tính năng tuổi
Thêm hình vuông tuổi
Để thêm một tính năng mới, bạn cần phải
- Chọn cột
- Áp dụng chuyển đổi và thêm nó vào DataFrame
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml7
Bạn có thể thấy rằng age_square đã được thêm thành công vào khung dữ liệu. Bạn có thể thay đổi thứ tự của các biến bằng select. Dưới đây, bạn mang age_square ngay sau tuổi
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml8
cd C:\Users\Admin\Anaconda3 echo.>hello-spark.yml notepad hello-spark.yml9
Loại trừ Hà Lan-Hà Lan
Khi một nhóm trong một tính năng chỉ có một quan sát, nó sẽ không mang lại thông tin gì cho mô hình. Ngược lại, nó có thể dẫn đến lỗi trong quá trình xác thực chéo
Cùng check nguồn gốc hộ nhé
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz0
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz1
Tính năng native_country chỉ có một hộ gia đình đến từ Hà Lan. Bạn loại trừ nó
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz2
Bước 3] Xây dựng quy trình xử lý dữ liệu
Tương tự như scikit-learning, Pyspark có API đường dẫn
Một đường ống rất thuận tiện để duy trì cấu trúc của dữ liệu. Bạn đẩy dữ liệu vào đường ống. Bên trong đường ống, các hoạt động khác nhau được thực hiện, đầu ra được sử dụng để cung cấp thuật toán
Chẳng hạn, một chuyển đổi phổ biến trong học máy bao gồm chuyển đổi một chuỗi thành một bộ mã hóa nóng, i. e. , một cột của một nhóm. Một bộ mã hóa nóng thường là một ma trận chứa đầy các số 0
Các bước để chuyển đổi dữ liệu rất giống với scikit-learning. Bạn cần phải
- Lập chỉ mục chuỗi thành số
- Tạo một bộ mã hóa nóng
- Chuyển đổi dữ liệu
Hai API thực hiện công việc. String Indexer, OneHotEncoder
- Trước hết, bạn chọn cột chuỗi để lập chỉ mục. inputCol là tên của cột trong tập dữ liệu. outputCol là tên mới được đặt cho cột đã chuyển đổi
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz3
- Phù hợp với dữ liệu và chuyển đổi nó
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz4
- Tạo các cột tin tức dựa trên nhóm. Chẳng hạn, nếu có 10 nhóm trong đối tượng địa lý, ma trận mới sẽ có 10 cột, mỗi cột cho một nhóm
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz5
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz6
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz7
Xây dựng đường ống
Bạn sẽ xây dựng một quy trình để chuyển đổi tất cả các tính năng chính xác và thêm chúng vào tập dữ liệu cuối cùng. Quy trình sẽ có bốn thao tác, nhưng bạn có thể thêm bao nhiêu thao tác tùy thích
- Mã hóa dữ liệu phân loại
- Lập chỉ mục tính năng nhãn
- Thêm biến liên tục
- Lắp ráp các bước
Mỗi bước được lưu trữ trong một danh sách có tên là các giai đoạn. Danh sách này sẽ cho VectorAssembler biết thao tác nào cần thực hiện bên trong đường ống
1. Mã hóa dữ liệu phân loại
Bước này hoàn toàn giống với ví dụ trên, ngoại trừ việc bạn lặp lại tất cả các tính năng phân loại
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz8
2. Lập chỉ mục tính năng nhãn
Spark, giống như nhiều thư viện khác, không chấp nhận giá trị chuỗi cho nhãn. Bạn chuyển đổi tính năng nhãn bằng StringIndexer và thêm nó vào giai đoạn danh sách
name: hello-spark dependencies: - python=3.6 - jupyter - ipython - numpy - numpy-base - pandas - py4j - pyspark - pytz9
3. Thêm biến liên tục
InputCols của VectorAssembler là một danh sách các cột. Bạn có thể tạo một danh sách mới chứa tất cả các cột mới. Mã bên dưới điền vào danh sách các tính năng phân loại được mã hóa và các tính năng liên tục
conda env create -f hello-spark.yml0
4. Lắp ráp các bước
Cuối cùng, bạn vượt qua tất cả các bước trong VectorAssembler
conda env create -f hello-spark.yml1
Bây giờ tất cả các bước đã sẵn sàng, bạn đẩy dữ liệu vào đường ống dẫn
conda env create -f hello-spark.yml2
Nếu bạn kiểm tra tập dữ liệu mới, bạn có thể thấy rằng nó chứa tất cả các tính năng, được chuyển đổi và không được chuyển đổi. Bạn chỉ quan tâm đến nhãn và các tính năng mới. Các tính năng bao gồm tất cả các tính năng được chuyển đổi và các biến liên tục
conda env create -f hello-spark.yml3
Bước 4] Xây dựng bộ phân loại. hậu cần
Để tính toán nhanh hơn, bạn chuyển đổi mô hình thành DataFrame
Bạn cần chọn nhãn mới và các tính năng từ mô hình bằng bản đồ
conda env create -f hello-spark.yml4
Bạn đã sẵn sàng tạo dữ liệu tàu dưới dạng DataFrame. Bạn sử dụng sqlContext
conda env create -f hello-spark.yml5
Kiểm tra hàng thứ hai
conda env create -f hello-spark.yml6
conda env create -f hello-spark.yml7
Tạo một tập huấn luyện/kiểm tra
Bạn chia tập dữ liệu 80/20 bằng RandomSplit
conda env create -f hello-spark.yml8
Hãy đếm xem có bao nhiêu người có thu nhập dưới/trên 50k trong cả tập huấn luyện và tập kiểm tra
conda env create -f hello-spark.yml9
conda env list0
conda env list1
conda env list2
Xây dựng hồi quy logistic
Cuối cùng nhưng không kém phần quan trọng, bạn có thể xây dựng bộ phân loại. Pyspark có một API gọi là LogisticRegression để thực hiện hồi quy logistic
Bạn khởi tạo lr bằng cách chỉ ra cột nhãn và cột tính năng. Bạn đặt tối đa 10 lần lặp và thêm tham số chuẩn hóa có giá trị bằng 0. 3. Lưu ý rằng trong phần tiếp theo, bạn sẽ sử dụng xác thực chéo với lưới tham số để điều chỉnh mô hình
conda env list3
#Bạn có thể thấy các hệ số từ hồi quy
conda env list4
conda env list5
Bước 5] Huấn luyện và đánh giá mô hình
Để tạo dự đoán cho bộ thử nghiệm của bạn,
Bạn có thể sử dụng linearModel với biến đổi [] trên test_data
conda env list6
Bạn có thể in các phần tử trong dự đoán
conda env list7
Bạn quan tâm đến nhãn, dự đoán và xác suất
conda env list8
conda env list9
Đánh giá mô hình
Bạn cần xem chỉ số chính xác để xem mô hình hoạt động tốt [hoặc kém] như thế nào. Hiện tại, không có API để tính toán độ chính xác trong Spark. Giá trị mặc định là ROC, đường cong đặc tính hoạt động của máy thu. Đó là một số liệu khác có tính đến tỷ lệ dương tính giả
Trước khi bạn xem ROC, hãy xây dựng thước đo độ chính xác. Bạn đã quen thuộc hơn với chỉ số này. Thước đo độ chính xác là tổng của dự đoán đúng trên tổng số quan sát
Bạn tạo một DataFrame có nhãn và `prediction
Activate hello-spark0
Bạn có thể kiểm tra số lớp trong nhãn và dự đoán
Activate hello-spark1
conda env list2
Activate hello-spark3
Activate hello-spark4
Chẳng hạn, trong bộ thử nghiệm, có 1578 hộ gia đình có thu nhập trên 50k và 5021 hộ gia đình dưới đây. Tuy nhiên, bộ phân loại đã dự đoán 617 hộ gia đình có thu nhập trên 50 nghìn
Bạn có thể tính toán độ chính xác bằng cách tính số lượng khi nhãn được phân loại chính xác trên tổng số hàng
Activate hello-spark5
0. 8237611759357478
Bạn có thể bọc mọi thứ lại với nhau và viết một hàm để tính toán độ chính xác
Activate hello-spark6
chỉ số ROC
Mô-đun BinaryClassificationEvaluator bao gồm các biện pháp ROC. Đường cong Đặc tính hoạt động của máy thu là một công cụ phổ biến khác được sử dụng với phân loại nhị phân. Nó rất giống với đường cong độ chính xác/thu hồi, nhưng thay vì vẽ biểu đồ độ chính xác so với thu hồi, đường cong ROC hiển thị tỷ lệ dương thực [tính bằng. e. thu hồi] so với tỷ lệ dương tính giả. Tỷ lệ dương tính giả là tỷ lệ các trường hợp âm tính được phân loại không chính xác là dương tính. Nó bằng một trừ đi tỷ lệ âm thực sự. Tỷ lệ âm tính thực sự còn được gọi là độ đặc hiệu. Do đó, đồ thị đường cong ROC có độ nhạy [thu hồi] so với 1 – độ đặc hiệu
Activate hello-spark7
0. 8940481662695192 khu vực Dưới ROC
Activate hello-spark8
0. 8940481662695192
Bước 6] Điều chỉnh siêu tham số
Cuối cùng nhưng không kém phần quan trọng, bạn có thể điều chỉnh siêu tham số. Tương tự như scikit learn bạn tạo lưới thông số, và bạn thêm thông số muốn chỉnh
Để giảm thời gian tính toán, bạn chỉ điều chỉnh tham số chuẩn hóa chỉ với hai giá trị
Activate hello-spark9
Cuối cùng, bạn đánh giá mô hình bằng phương pháp xác thực chéo với 5 lần. Mất khoảng 16 phút để đào tạo
source activate hello-spark0
Thời gian đào tạo người mẫu. 978. 807 giây
Siêu tham số chuẩn hóa tốt nhất là 0. 01, với độ chính xác 85. 316 phần trăm
source activate hello-spark1
Bạn có thể trích xuất tham số được đề xuất bằng cách xâu chuỗi cvModel. bestModel với extractParamMap[]
source activate hello-spark2
source activate hello-spark3
Tóm lược
Spark là một công cụ cơ bản cho một nhà khoa học dữ liệu. Nó cho phép người thực hành kết nối một ứng dụng với các nguồn dữ liệu khác nhau, thực hiện phân tích dữ liệu một cách liền mạch hoặc thêm một mô hình dự đoán
Để bắt đầu với Spark, bạn cần khởi tạo Bối cảnh Spark với
`SparkContext[]“
và ngữ cảnh SQL để kết nối với nguồn dữ liệu
`SQLContext[]“
Trong hướng dẫn này, bạn học cách huấn luyện hồi quy logistic
- Chuyển đổi tập dữ liệu thành Dataframe với
source activate hello-spark4
Lưu ý rằng tên cột của nhãn là nhãn mới và tất cả các tính năng được tập hợp trong các tính năng. Thay đổi các giá trị này nếu khác trong tập dữ liệu của bạn