Spark trong 35 ngày
Tuần 1: Nền tảng Spark và RDDs (Resilient Distributed Datasets)
Ngày 1:
Giới thiệu Apache Spark: Big Data, ưu điểm của Spark (tốc độ, dễ sử dụng, tính linh hoạt), kiến trúc tổng quan, các thành phần (Spark Core, Spark SQL, Spark Streaming, MLlib, GraphX), so sánh với Hadoop MapReduce.
Bài tập:
Cài đặt Spark trên máy cục bộ và chạy ứng dụng "Word Count" mẫu.
Nghiên cứu các trường hợp sử dụng Spark trong các ngành công nghiệp khác nhau.
So sánh và đối chiếu Spark với các công cụ Big Data khác như Flink và Storm.
Ngày 2:
RDDs: Khái niệm, đặc điểm (immutable, distributed, fault-tolerant), tạo RDD (parallelize, external data), các loại RDD (textFile, wholeTextFiles, sequenceFile, HadoopRDD), các hoạt động cơ bản trên RDD (map, filter, flatMap).
Bài tập:
Tạo RDD từ một tập tin văn bản lớn và đếm số lần xuất hiện của từng từ.
Lọc ra các dòng dữ liệu thỏa mãn một điều kiện cụ thể từ RDD.
Áp dụng một hàm tùy chỉnh lên từng phần tử của RDD.
Ngày 3:
Transformations & Actions: Lazy evaluation, narrow vs. wide transformations, các transformations phổ biến (map, filter, flatMap, reduceByKey, groupByKey, join, distinct, sample), các actions (collect, count, take, saveAsTextFile).
Bài tập:
Tìm 10 từ xuất hiện nhiều nhất trong một tập tin văn bản lớn.
Tính tổng doanh thu theo từng danh mục sản phẩm từ một RDD chứa dữ liệu bán hàng.
Ghép hai RDD dựa trên một khóa chung.
Ngày 4:
Pair RDDs: Khái niệm, tạo Pair RDD, các phép toán trên Pair RDD (reduceByKey, groupByKey, sortByKey, join, cogroup).
Bài tập:
Tìm sản phẩm bán chạy nhất trong mỗi tháng từ một RDD chứa dữ liệu bán hàng.
Tính trung bình điểm của học sinh theo từng lớp từ một RDD chứa dữ liệu điểm số.
Thực hiện phép "cogroup" để kết hợp dữ liệu từ hai RDD có cùng khóa nhưng giá trị khác nhau.
Ngày 5:
Shared Variables: Broadcast variables, accumulators.
Spark UI: Giám sát ứng dụng Spark, tìm hiểu về các thông tin quan trọng (jobs, stages, tasks), tối ưu hóa hiệu suất thông qua Spark UI.
Bài tập:
Sử dụng broadcast variables để chia sẻ một từ điển lớn cho tất cả các worker node.
Sử dụng accumulators để đếm số lượng bản ghi lỗi trong quá trình xử lý dữ liệu.
Phân tích Spark UI để xác định các nút cổ chai hiệu suất trong một ứng dụng Spark.
Tuần 2: Spark SQL, DataFrames và Datasets
Ngày 6:
Spark SQL: Giới thiệu, kiến trúc, DataFrame và Dataset, các cách tạo DataFrame (từ RDD, file CSV/JSON, JDBC), truy vấn SQL cơ bản.
Bài tập:
Tạo DataFrame từ một file CSV chứa dữ liệu mạng xã hội và thực hiện các truy vấn SQL đơn giản (ví dụ: đếm số bài đăng theo ngày, tìm các hashtag phổ biến).
Kết nối Spark SQL với một cơ sở dữ liệu quan hệ (MySQL, PostgreSQL) và thực hiện các truy vấn trên dữ liệu đó.
Tìm hiểu về các tùy chọn cấu hình Spark SQL khác nhau (spark.sql.shuffle.partitions, spark.sql.codegen.wholeStage).
Ngày 7:
Transformations trên DataFrames: select, filter, withColumn, groupBy, agg, orderBy, join, union, window functions.
Bài tập:
Tính toán số lượng người dùng hoạt động hàng ngày, hàng tuần và hàng tháng từ dữ liệu mạng xã hội.
Tìm các bài đăng có số lượt thích và bình luận cao nhất.
Phân tích sự tương quan giữa các hashtag khác nhau trong dữ liệu mạng xã hội.
Ngày 8:
Spark SQL Functions: Built-in functions (aggregate, string, date/time, collection), UDFs (User-Defined Functions), sử dụng SQL và UDFs để phân tích sentiment.
Bài tập:
Tạo UDF để phân loại sentiment của các bài đăng trên mạng xã hội (tích cực, tiêu cực, trung tính).
Sử dụng các hàm chuỗi để trích xuất hashtag và mentions từ văn bản bài đăng.
Tính toán các số liệu thống kê về thời gian đăng bài (ví dụ: số bài đăng theo giờ, ngày trong tuần).
Ngày 9:
Datasets: Giới thiệu, so sánh với DataFrame, type-safe operations, Encoder, chuyển đổi giữa DataFrame và Dataset.
Bài tập:
Chuyển đổi DataFrame chứa dữ liệu mạng xã hội thành Dataset và thực hiện các phép toán type-safe trên đó.
Tạo một Encoder tùy chỉnh để ánh xạ một lớp case class phức tạp thành Dataset.
So sánh hiệu suất của các phép toán trên DataFrame và Dataset.
Ngày 10:
Spark SQL Performance Tuning: Caching, persistence, partitioning, bucketing, broadcast joins, adaptive query execution.
Bài tập:
Tối ưu hóa một truy vấn Spark SQL phức tạp bằng cách sử dụng caching và partitioning.
Sử dụng bucketing để cải thiện hiệu suất của các phép nối trên dữ liệu mạng xã hội.
Theo dõi quá trình thực thi truy vấn bằng Spark UI và xác định các cơ hội tối ưu hóa.
Tuần 3: PySpark, Spark Streaming và Structured Streaming
Ngày 11:
Giới thiệu PySpark: Cài đặt và thiết lập môi trường, SparkContext và SparkSession trong PySpark, RDDs trong PySpark, chuyển đổi qua lại giữa RDD, DataFrame và Dataset.
Bài tập:
Viết lại các bài tập Spark SQL trước đó bằng PySpark.
Thực hiện các phép biến đổi trên RDD bằng PySpark (map, filter, reduceByKey).
Tạo một UDF trong PySpark để phân tích sentiment của văn bản tiếng Anh.
Ngày 12:
PySpark DataFrames: Tạo DataFrame, các phép biến đổi và hành động, UDFs trong PySpark, sử dụng các thư viện NLP (Natural Language Processing) như NLTK hoặc spaCy để tiền xử lý văn bản.
Bài tập:
Tiền xử lý dữ liệu văn bản từ mạng xã hội bằng PySpark (loại bỏ stop words, stemming/lemmatization).
Trích xuất các đặc trưng từ văn bản (bag-of-words, TF-IDF) và sử dụng chúng để huấn luyện mô hình phân loại sentiment.
Tích hợp Spark với các thư viện trực quan hóa dữ liệu như Matplotlib hoặc Seaborn để hiển thị kết quả phân tích.
Ngày 13:
Spark Streaming: Giới thiệu, DStreams (Discretized Streams), các nguồn dữ liệu (socket, Kafka, Flume), window operations, tích hợp với các thư viện xử lý luồng dữ liệu như Kafka Streams hoặc Flink.
Bài tập:
Xây dựng một ứng dụng Spark Streaming để đọc dữ liệu từ Twitter API theo thời gian thực.
Thực hiện phân tích sentiment trên luồng dữ liệu Twitter và hiển thị kết quả theo thời gian thực.
Tích hợp Spark Streaming với Kafka để xử lý luồng dữ liệu lớn từ nhiều nguồn khác nhau.
Ngày 14:
Spark Structured Streaming: Giới thiệu, so sánh với DStreams, các nguồn dữ liệu (Kafka, file systems, socket), transformations, output sinks (console, file, Kafka, foreach), watermarking, xử lý dữ liệu trễ.
Bài tập:
Xây dựng một ứng dụng Structured Streaming để đọc dữ liệu từ Twitter API theo thời gian thực và ghi vào một file Parquet.
Thực hiện các phép biến đổi trên luồng dữ liệu (ví dụ: lọc theo hashtag, tính số lượng tweet theo phút).
Tìm hiểu về watermarking và các chiến lược xử lý dữ liệu trễ trong Structured Streaming.
Ngày 15:
State Management trong Spark Streaming và Structured Streaming: UpdateStateByKey, mapWithState, arbitrary stateful operations.
Bài tập:
Theo dõi xu hướng hashtag trên Twitter theo thời gian thực bằng cách sử dụng stateful operations trong Structured Streaming.
Xây dựng một ứng dụng phát hiện bất thường trong luồng dữ liệu bằng cách sử dụng stateful operations.
Tìm hiểu về các cách khác nhau để quản lý trạng thái trong Spark Streaming và Structured Streaming.
Tuần 4: Spark MLlib và GraphX
Ngày 16:
Spark MLlib: Giới thiệu, các thuật toán Machine Learning (phân loại, hồi quy, phân cụm, collaborative filtering), Pipelines, Feature Transformers, Estimators, Model Selection và Hyperparameter Tuning.
Bài tập:
Xây dựng một mô hình phân loại để dự đoán sentiment của bài đăng trên mạng xã hội bằng cách sử dụng Logistic Regression hoặc Naive Bayes.
Sử dụng các Feature Transformer để chuẩn hóa và vector hóa dữ liệu văn bản.
Đánh giá hiệu suất của mô hình bằng các chỉ số như accuracy, precision, recall.
Ngày 17:
Spark MLlib (tiếp theo): Các thuật toán phân cụm (K-means, Gaussian Mixture), giảm chiều dữ liệu (PCA, SVD), tìm kiếm chủ đề (LDA).
Bài tập:
Phân cụm người dùng trên mạng xã hội dựa trên hành vi của họ (ví dụ: số lượng bài đăng, lượt thích, bình luận).
Sử dụng LDA để tìm các chủ đề tiềm ẩn trong nội dung bài đăng trên mạng xã hội.
Giảm chiều dữ liệu văn bản bằng PCA hoặc SVD để cải thiện hiệu suất của mô hình phân loại sentiment.
Ngày 18:
Spark GraphX: Giới thiệu, Graph và VertexRDD, các thuật toán trên đồ thị (PageRank, Connected Components, Triangle Counting), GraphFrames.
Bài tập:
Xây dựng một đồ thị mạng xã hội từ dữ liệu Twitter hoặc Facebook.
Tính toán PageRank của các tài khoản người dùng để xác định những người có ảnh hưởng nhất.
Tìm các cộng đồng (clusters) trong mạng xã hội bằng thuật toán Connected Components.
Ngày 19:
Spark GraphX (tiếp theo): Pregel API, Graph Algorithms, tích hợp với các thư viện đồ thị khác như NetworkX.
Bài tập:
Sử dụng Pregel API để thực hiện một thuật toán lan truyền thông tin trên mạng xã hội (ví dụ: mô hình dịch bệnh).
Tìm các đường đi ngắn nhất giữa các tài khoản người dùng trong mạng xã hội.
Tích hợp Spark GraphX với NetworkX để trực quan hóa đồ thị mạng xã hội.
Ngày 20:
Spark Performance Tuning: Tổng quan về các kỹ thuật tối ưu hóa hiệu suất trong Spark (caching, persistence, partitioning, serialization, garbage collection), profiling ứng dụng Spark bằng Spark UI và các công cụ khác.
Bài tập:
Tối ưu hóa hiệu suất của một ứng dụng Spark MLlib bằng cách điều chỉnh các tham số như số lượng phân vùng, mức độ persistence, và loại serializer.
Sử dụng Spark UI để phân tích hiệu suất của một ứng dụng Spark GraphX và xác định các nút cổ chai.
Nghiên cứu các kỹ thuật nâng cao để tối ưu hóa hiệu suất Spark như whole-stage code generation và off-heap memory management.
Tuần 5: Dự án Phân tích Dữ liệu Mạng Xã hội & Nâng cao
Ngày 21-27:
Dự án Phân tích Dữ liệu Mạng Xã hội:
Ngày 21: Thu thập dữ liệu từ Twitter hoặc Facebook API, lựa chọn các trường dữ liệu quan trọng (ví dụ: nội dung bài đăng, thời gian, hashtag, lượt thích, bình luận).
Ngày 22: Tiền xử lý dữ liệu: làm sạch dữ liệu (loại bỏ các ký tự đặc biệt, URL, emoji), chuẩn hóa văn bản, tách từ (tokenization), loại bỏ stop words, stemming/lemmatization.
Ngày 23: Phân tích thăm dò (Exploratory Data Analysis - EDA): trực quan hóa dữ liệu để hiểu rõ hơn về phân phối của các đặc trưng, mối quan hệ giữa các biến, tìm kiếm các mẫu và xu hướng thú vị.
Ngày 24: Phân tích sentiment: xây dựng mô hình phân loại sentiment bằng cách sử dụng các thuật toán như Logistic Regression, Naive Bayes, hoặc các mô hình deep learning như LSTM hoặc Transformer.
Ngày 25: Tìm kiếm các chủ đề phổ biến: sử dụng các kỹ thuật như phân cụm (K-means, LDA) hoặc phân tích tần suất từ để xác định các chủ đề chính trong dữ liệu.
Ngày 26: Xây dựng mô hình dự đoán: sử dụng các mô hình hồi quy hoặc phân loại để dự đoán các biến mục tiêu như số lượng lượt thích, chia sẻ hoặc bình luận của một bài đăng.
Ngày 27: Đánh giá và cải thiện mô hình: sử dụng các kỹ thuật như cross-validation, grid search để đánh giá hiệu suất của mô hình và tìm các siêu tham số tốt nhất.
Ngày 28:
Spark với các hệ thống lưu trữ lớn: Tìm hiểu cách tích hợp Spark với các hệ thống lưu trữ lớn như HDFS, S3, Cassandra, MongoDB.
Bài tập:
Đọc và ghi dữ liệu từ HDFS bằng Spark.
Sử dụng Spark để truy vấn dữ liệu từ Cassandra hoặc MongoDB.
Tìm hiểu về các tùy chọn cấu hình để tối ưu hóa hiệu suất khi làm việc với các hệ thống lưu trữ lớn.
Ngày 29:
Spark với các hệ thống xử lý luồng dữ liệu: Tìm hiểu cách tích hợp Spark Streaming và Structured Streaming với các hệ thống xử lý luồng dữ liệu như Kafka, Kinesis, Flume.
Bài tập:
Xây dựng một ứng dụng Spark Streaming để đọc dữ liệu từ Kafka và thực hiện các phép tính theo thời gian thực.
Sử dụng Spark Structured Streaming để đọc dữ liệu từ Kinesis và ghi vào một hồ dữ liệu (data lake).
Tìm hiểu về các chiến lược xử lý dữ liệu trễ và watermarking khi làm việc với các hệ thống xử lý luồng dữ liệu.
Ngày 30:
Spark trên đám mây: Tìm hiểu cách triển khai và chạy ứng dụng Spark trên các nền tảng đám mây như AWS EMR, Databricks, Google Cloud Dataproc.
Bài tập:
Triển khai một ứng dụng Spark đơn giản trên AWS EMR.
Sử dụng Databricks để chạy các notebook Spark và phân tích dữ liệu.
So sánh các ưu điểm và nhược điểm của việc chạy Spark trên đám mây so với việc chạy trên cơ sở hạ tầng tại chỗ.
Tuần 6: Chủ đề Nâng cao
Ngày 31: Spark GraphFrames và Graph Algorithms
Sáng:
GraphFrames: Giới thiệu, tạo GraphFrames từ DataFrames (vertices và edges), các truy vấn cơ bản (degrees, inDegrees, outDegrees), motifs (tìm kiếm các mẫu con trong đồ thị).
Bài tập:
Tạo một GraphFrame từ dữ liệu mạng xã hội (người dùng là đỉnh, mối quan hệ là cạnh).
Tìm những người dùng có nhiều bạn bè nhất (bậc cao nhất).
Tìm các tam giác (ba người dùng đều là bạn của nhau).
Chiều:
Graph Algorithms: Các thuật toán tích hợp (PageRank, Connected Components, Strongly Connected Components, Label Propagation, Shortest Paths, Triangle Count).
Bài tập:
Tính toán PageRank của người dùng trong mạng xã hội.
Tìm các cộng đồng (strongly connected components) trong mạng xã hội.
Tìm đường đi ngắn nhất giữa hai người dùng bất kỳ.
Ngày 32: Spark ML Pipelines nâng cao
Sáng:
Feature Engineering: Tạo các đặc trưng mới (polynomial features, feature interactions), lựa chọn đặc trưng (chi-square, mutual information), giảm chiều dữ liệu (PCA, LDA).
Bài tập:
Tạo các đặc trưng mới từ dữ liệu mạng xã hội (ví dụ: số lượng hashtag, độ dài bài đăng).
Lựa chọn các đặc trưng quan trọng nhất cho mô hình phân loại sentiment.
Giảm chiều dữ liệu văn bản bằng PCA hoặc LDA.
Chiều:
Hyperparameter Tuning: Grid search, random search, cross-validation.
Model Evaluation: Các chỉ số đánh giá (accuracy, precision, recall, F1-score, AUC-ROC), confusion matrix.
Bài tập:
Tìm các siêu tham số tốt nhất cho mô hình phân loại sentiment bằng grid search hoặc random search.
Đánh giá hiệu suất của mô hình trên tập dữ liệu kiểm tra.
Vẽ confusion matrix để phân tích các lỗi của mô hình.
Ngày 33: Xử lý ngôn ngữ tự nhiên (NLP) với Spark NLP
Sáng:
Giới thiệu Spark NLP: Các tính năng chính, so sánh với các thư viện NLP khác (NLTK, spaCy).
Tiền xử lý văn bản: Tokenization, sentence detection, stemming, lemmatization, stop word removal.
Bài tập:
Cài đặt Spark NLP và thử nghiệm các tính năng cơ bản.
Tiền xử lý dữ liệu văn bản từ mạng xã hội bằng Spark NLP.
So sánh hiệu suất của Spark NLP với NLTK hoặc spaCy.
Chiều:
Phân tích sentiment: Sử dụng các mô hình tiền huấn luyện (pretrained models) của Spark NLP để phân loại sentiment.
Nhận dạng thực thể (Named Entity Recognition - NER): Trích xuất các thực thể (người, địa điểm, tổ chức) từ văn bản.
Bài tập:
Phân loại sentiment của các bài đăng trên mạng xã hội bằng Spark NLP.
Nhận dạng các thực thể được đề cập trong các bài đăng.
Tìm hiểu về các mô hình tiền huấn luyện khác của Spark NLP (ví dụ: phân tích cú pháp dependency parsing).
Ngày 34: Tối ưu hóa hiệu suất Spark nâng cao và Triển khai ứng dụng Spark
Sáng:
Tối ưu hóa hiệu suất Spark nâng cao: Whole-stage code generation, off-heap memory management, broadcast joins, data skew handling.
Bài tập:
Sử dụng whole-stage code generation để cải thiện hiệu suất của một truy vấn Spark SQL phức tạp.
Sử dụng off-heap memory để giảm thiểu garbage collection overhead.
Xử lý data skew trong một phép nối Spark.
Chiều:
Triển khai ứng dụng Spark: Các chế độ triển khai (client, cluster), đóng gói ứng dụng, sử dụng spark-submit, giám sát và gỡ lỗi ứng dụng trong môi trường production.
Bài tập:
Đóng gói ứng dụng phân tích dữ liệu mạng xã hội của bạn thành một JAR file.
Triển khai ứng dụng trên một cụm Spark (ví dụ: Standalone, YARN, Mesos).
Sử dụng các công cụ giám sát như Ganglia hoặc Prometheus để theo dõi hiệu suất của ứng dụng.
Ngày 35:
- Hoàn thiện và trình bày dự án: Tổng hợp kết quả dự án, viết báo cáo, chuẩn bị slide trình bày, thực hành trình bày và trả lời câu hỏi.