Chuyển đến nội dung chính

36 câu hỏi phỏng vấn PySpark hàng đầu kèm câu trả lời cho năm 2026

Bài viết này cung cấp hướng dẫn toàn diện về các câu hỏi và câu trả lời phỏng vấn PySpark, bao quát từ khái niệm nền tảng đến kỹ thuật nâng cao và chiến lược tối ưu hóa.
Đã cập nhật 16 thg 4, 2026  · 15 phút đọc

Apache Spark là một công cụ phân tích dữ liệu hợp nhất, được tạo ra và thiết kế để xử lý khối lượng dữ liệu khổng lồ một cách nhanh chóng và hiệu quả.

Khi chuyên môn về PySpark ngày càng được săn đón trong ngành dữ liệu, bài viết này sẽ cung cấp hướng dẫn toàn diện về các câu hỏi phỏng vấn PySpark, bao gồm nhiều chủ đề từ khái niệm cơ bản đến kỹ thuật nâng cao.

Nếu bạn đang tìm kiếm một nguồn học PySpark có cấu trúc bài bản, hãy xem khóa học Introduction to PySpark của chúng tôi.

Câu hỏi phỏng vấn PySpark cơ bản

Hãy bắt đầu bằng cách khám phá một số câu hỏi phỏng vấn PySpark nền tảng nhằm đánh giá hiểu biết của bạn về các khái niệm cốt lõi và lợi thế của thư viện mạnh mẽ này.

Những ưu điểm chính của việc dùng PySpark so với Python truyền thống cho xử lý dữ liệu lớn là gì?

PySpark, API Python cho Apache Spark, mang lại nhiều lợi thế so với Python truyền thống trong xử lý dữ liệu lớn. Bao gồm:

  • Khả năng mở rộng để xử lý bộ dữ liệu khổng lồ.
  • Hiệu năng cao nhờ xử lý song song.
  • Khả năng chịu lỗi đảm bảo độ tin cậy dữ liệu.
  • Tích hợp với các công cụ dữ liệu lớn khác trong hệ sinh thái Apache.

Bạn tạo SparkSession trong PySpark như thế nào? Công dụng chính của nó là gì?

Trong PySpark, SparkSession là điểm vào để sử dụng các chức năng của Spark và được tạo bằng API SparkSession.builder

Các công dụng chính gồm:

  • Tương tác với Spark SQL để xử lý dữ liệu có cấu trúc.
  • Tạo DataFrame.
  • Cấu hình các thuộc tính Spark.
  • Quản lý vòng đời của SparkContext và SparkSession.

Dưới đây là ví dụ cách tạo một SparkSession

from pyspark.sql import SparkSession
     
spark = SparkSession.builder \
         .appName("MySparkApp") \
         .master("local[*]") \
         .getOrCreate()	

Mô tả các cách khác nhau để đọc dữ liệu vào PySpark.

PySpark hỗ trợ đọc dữ liệu từ nhiều nguồn như CSV, Parquet và JSON, trong số các định dạng khác. Để làm điều này, nó cung cấp các phương thức khác nhau, gồm spark.read.csv(), spark.read.parquet(), spark.read.json(), spark.read.format(), spark.read.load()

Dưới đây là ví dụ cách đọc dữ liệu vào PySpark: 

df_from_csv = spark.read.csv("my_file.csv", header=True)
df_from_parquet = spark.read.parquet("my_file.parquet")
df_from_json = spark.read.json("my_file.json")

Bạn xử lý dữ liệu thiếu trong PySpark như thế nào?

Trong PySpark, chúng ta có thể xử lý dữ liệu thiếu bằng một số phương pháp:

  • Có thể loại bỏ các hàng hoặc cột chứa giá trị thiếu bằng phương thức .dropna().

  • Có thể điền dữ liệu thiếu bằng một giá trị cụ thể hoặc dùng phương pháp nội suy với .fillna().

  • Có thể bù giá trị thiếu bằng các phương pháp thống kê như trung bình hoặc trung vị sử dụng Imputer.

Dưới đây là ví dụ cách xử lý dữ liệu thiếu trong PySpark: 

# How to drop rows 
df_from_csv.dropna(how="any")

# How to fill missing values with a constant
df_from_parquet.fillna(value=2)

# How to impute values with median
from pyspark.ml.feature import Imputer
imputer = Imputer(strategy="median", inputCols=["price","rooms"], outputCols=["price_imputed","rooms_imputed"])
model = imputer.fit(df_from_json)
df_imputed = model.transform(df_from_json)

Bạn có thể cache dữ liệu trong PySpark để cải thiện hiệu năng như thế nào?

Một trong những ưu điểm của PySpark là cho phép chúng ta sử dụng các phương thức .cache() hoặc .persist() để lưu dữ liệu trong bộ nhớ hoặc ở mức lưu trữ chỉ định. Việc này cải thiện hiệu năng bằng cách tránh tính toán lặp lại và giảm nhu cầu tuần tự hóa/giải tuần tự dữ liệu. 

Dưới đây là ví dụ cách cache dữ liệu trong PySpark: 

# How to cache data in memory 
df_from_csv.cache()

# How to persist data in local disk 
df_from_csv.persist(storageLevel=StorageLevel.DISK_ONLY)

Mô tả việc thực hiện join trong PySpark.

PySpark cho phép chúng ta thực hiện nhiều loại join: inner, outer, left và right. Bằng cách dùng phương thức .join(), chúng ta có thể chỉ định điều kiện join trong tham số on và loại join trong tham số how, như ví dụ sau:

# How to inner join two datasets
df_from_csv.join(df_from_json, on="id", how="inner")

# How to outer datasets
df_from_json.join(df_from_parquet, on="product_id", how="outer")

Những khác biệt chính giữa RDD, DataFrame và Dataset trong PySpark là gì?

RDD (Resilient Distributed Dataset), DataFrame và Dataset là các trừu tượng quan trọng trong Spark cho phép chúng ta làm việc với dữ liệu có cấu trúc trong môi trường tính toán phân tán. Dù đều là các cách biểu diễn dữ liệu, chúng có những khác biệt then chốt:

  • RDD là API cấp thấp, không có schema và cho phép kiểm soát dữ liệu. Chúng là các tập hợp đối tượng bất biến 
  • DataFrame là API cấp cao xây dựng trên RDD, được tối ưu cho hiệu năng nhưng không đảm bảo an toàn kiểu. Chúng tổ chức dữ liệu có cấu trúc và bán cấu trúc thành các cột có tên.
  • Dataset kết hợp ưu điểm của RDD và DataFrame. Đây là API cấp cao cung cấp trừu tượng an toàn kiểu. Hỗ trợ Python và Scala, cung cấp kiểm tra kiểu lúc biên dịch đồng thời nhanh hơn DataFrame. 

Giải thích khái niệm đánh giá lười (lazy evaluation) trong PySpark. Nó ảnh hưởng đến hiệu năng thế nào?

PySpark triển khai chiến lược gọi là đánh giá lười, trong đó các phép biến đổi áp dụng lên các tập dữ liệu phân tán (RDD, DataFrame hoặc Dataset) không được thực thi ngay. Ngược lại, Spark xây dựng một chuỗi các thao tác hoặc biến đổi sẽ được thực hiện trên dữ liệu gọi là đồ thị có hướng không chu trình (DAG). Đánh giá lười cải thiện hiệu năng và tối ưu thực thi vì phép tính chỉ được tiến hành khi có một hành động được kích hoạt và thực sự cần thiết.

Vai trò của phân vùng (partitioning) trong PySpark là gì? Nó có thể cải thiện hiệu năng ra sao?

Trong PySpark, phân vùng dữ liệu là tính năng then chốt giúp chúng ta phân phối tải đều giữa các nút trong cụm. Phân vùng là hành động chia dữ liệu thành các mảnh nhỏ hơn (partition) được xử lý độc lập và song song trên cụm. Nó cải thiện hiệu năng bằng cách cho phép xử lý song song, giảm di chuyển dữ liệu và tăng hiệu quả sử dụng tài nguyên. Có thể kiểm soát phân vùng bằng các phương thức như .repartition().coalesce().

Giải thích khái niệm biến broadcast trong PySpark và nêu một trường hợp sử dụng.

Biến broadcast là một tính năng chủ chốt của khung tính toán phân tán Spark. Trong PySpark, chúng là các biến chỉ đọc, được cache và phân phối tới các nút trong cụm để tránh các thao tác shuffle. Chúng rất hữu ích khi ta có một ứng dụng machine learning phân tán cần dùng và tải một mô hình đã huấn luyện. Chúng ta broadcast mô hình như một biến, giúp giảm chi phí truyền dữ liệu và cải thiện hiệu năng.

Những khác biệt giữa PySpark và pandas là gì?

PySpark và pandas đều phổ biến cho thao tác dữ liệu, nhưng có khác biệt chính:

  • Khả năng mở rộng: PySpark được thiết kế cho dữ liệu lớn và xử lý phân tán, trong khi pandas phù hợp với bộ dữ liệu nhỏ nằm gọn trong bộ nhớ.
  • Hiệu năng: PySpark xử lý song song trên các cụm, nhanh hơn nhiều với bộ dữ liệu lớn so với pandas vốn chạy trên một máy.
  • Dễ sử dụng: Pandas đơn giản hơn cho phân tích khám phá dữ liệu (EDA), còn PySpark phức tạp hơn nhưng được tối ưu cao cho tính toán phân tán.

Bạn có thể chuyển đổi giữa Pandas DataFrame và PySpark DataFrame như thế nào?

Bạn có thể chuyển từ Pandas DataFrame sang PySpark DataFrame bằng spark.createDataFrame() và ngược lại bằng .toPandas().

import pandas as pd
from pyspark.sql import SparkSession

# Initialize SparkSession
spark = SparkSession.builder.appName("Example").getOrCreate()

# Create Pandas DataFrame
pdf = pd.DataFrame({'id': [1, 2, 3], 'value': [10, 20, 30]})

# Convert to PySpark DataFrame
df_spark = spark.createDataFrame(pdf)

# Convert back to Pandas DataFrame
pdf_new = df_spark.toPandas()

Câu hỏi phỏng vấn PySpark trung cấp

Sau khi đã điểm qua các nội dung cơ bản, hãy chuyển sang những câu hỏi PySpark ở mức trung cấp, đi sâu hơn vào kiến trúc và mô hình thực thi của các ứng dụng Spark.

Spark Driver là gì và trách nhiệm của nó?

Spark Driver là tiến trình cốt lõi điều phối các ứng dụng Spark bằng cách thực thi tác vụ trên các cụm. Nó giao tiếp với trình quản lý cụm để cấp phát tài nguyên, lập lịch tác vụ và giám sát quá trình thực thi các job của Spark.

Spark DAG là gì?

Đồ thị có hướng không chu trình (DAG) trong Spark là một khái niệm then chốt vì nó biểu diễn mô hình thực thi logic của Spark. Nó có hướng vì mỗi nút biểu diễn một phép biến đổi được thực hiện theo thứ tự xác định ở các cạnh. Nó không chu trình vì không có vòng lặp trong kế hoạch thực thi. Kế hoạch này được tối ưu hóa bằng cách ghép pipeline các phép biến đổi, gộp tác vụ và đẩy điều kiện lọc xuống (predicate pushdown).

Những loại trình quản lý cụm (cluster manager) có trong Spark là gì?

Hiện Spark hỗ trợ các trình quản lý cụm khác nhau để quản lý tài nguyên và lập lịch job, bao gồm:

  • Standalone, cụm đơn giản tích hợp trong Spark.
  • Hadoop YARN là trình quản lý tổng quát trong Hadoop dùng cho lập lịch job và quản lý tài nguyên.
  • Kubernetes dùng để tự động hóa, triển khai, mở rộng và quản lý ứng dụng dạng container.
  • Apache Mesos (nay đã ngừng) từng là hệ thống phân tán dùng để quản lý tài nguyên theo ứng dụng.

Mô tả cách triển khai một phép biến đổi tùy chỉnh trong PySpark.

Để triển khai một phép biến đổi tùy chỉnh trong PySpark, chúng ta có thể định nghĩa một hàm Python thao tác trên các PySpark DataFrame rồi dùng phương thức .transform() để gọi phép biến đổi.

Dưới đây là ví dụ cách triển khai một phép biến đổi tùy chỉnh trong PySpark: 

# Define a python function that operates on pySpark DataFrames
def get_discounted_price(df):
    return df.withColumn("discounted_price", \
                          df.price - (df.price * df.discount) / 100) 

# Evoke the transformation
df_discounted = df_from_csv.transfrom(get_discounted_price)

Giải thích khái niệm hàm cửa sổ (window functions) trong PySpark và đưa ra ví dụ.

Hàm cửa sổ trong PySpark cho phép chúng ta áp dụng các phép tính trên một cửa sổ các hàng và trả về một giá trị cho mỗi hàng đầu vào. Ta có thể thực hiện xếp hạng, phân tích và các hàm tổng hợp. 

Dưới đây là ví dụ cách áp dụng hàm cửa sổ trong PySpark: 

from pyspark.sql.window import Window
from pyspark.sql.functions import row_number

# Define the window function
window = Window.orderBy("discounted_price")

# Apply window function
df = df_from_csv.withColumn("row_number", row_number().over(window))

Bạn xử lý lỗi và ngoại lệ trong PySpark như thế nào?

Một trong những cách hữu ích nhất để xử lý lỗi và ngoại lệ trong các phép biến đổi và hành động của PySpark là bao bọc mã trong các khối try-except để bắt lỗi. Trên RDD, chúng ta có thể dùng phép foreach để lặp qua phần tử và xử lý ngoại lệ. 

Mục đích của checkpoint trong PySpark là gì?

Trong PySpark, checkpointing ngụ ý rằng RDD được lưu xuống đĩa để điểm trung gian này có thể được tham chiếu về sau thay vì tính lại RDD từ nguồn ban đầu. Checkpoint cung cấp cách phục hồi sau lỗi vì driver có thể khởi động lại với trạng thái đã tính trước đó. 

PySpark suy luận schema như thế nào và làm sao bạn có thể định nghĩa schema tường minh?

PySpark tự động suy luận schema khi nạp dữ liệu có cấu trúc, nhưng để kiểm soát tốt hơn và hiệu quả hơn, bạn có thể định nghĩa schema tường minh bằng StructTypeStructField.

from pyspark.sql.types import StructType, StructField, IntegerType, StringType

schema = StructType([
    StructField("id", IntegerType(), True),
    StructField("name", StringType(), True)
])

df = spark.read.csv("data.csv", schema=schema, header=True)

Câu hỏi phỏng vấn PySpark nâng cao

Đối với những ai nhắm đến vai trò cấp cao hơn hoặc muốn thể hiện hiểu biết sâu về PySpark, hãy cùng khám phá một số câu hỏi phỏng vấn nâng cao đi vào chi tiết các phép biến đổi và tối ưu hóa trong hệ sinh thái PySpark.

Giải thích sự khác nhau giữa biến đổi hẹp (narrow) và rộng (wide) trong PySpark.

Trong PySpark, biến đổi hẹp diễn ra khi mỗi partition đầu vào đóng góp tối đa cho một partition đầu ra và không yêu cầu shuffle. Ví dụ gồm map(), filter()union. Ngược lại, biến đổi rộng cần thiết cho các thao tác mà mỗi partition đầu vào có thể đóng góp cho nhiều partition đầu ra và yêu cầu shuffle dữ liệu, join hoặc tổng hợp. Ví dụ gồm groupBy(), join()sortBy().

Catalyst optimizer trong Spark là gì và nó hoạt động ra sao?

Trong Spark, Catalyst optimizer là một thành phần dựa trên luật của Spark SQL dùng để tối ưu hiệu năng truy vấn. Nhiệm vụ chính của nó là biến đổi và cải thiện các thao tác SQL hoặc DataFrame của người dùng để tạo ra kế hoạch thực thi vật lý hiệu quả, phù hợp với đặc điểm truy vấn và tập dữ liệu cụ thể.

Mô tả cách triển khai tổng hợp (aggregation) tùy chỉnh trong PySpark.

Để triển khai tổng hợp tùy chỉnh trong PySpark, chúng ta có thể dùng các phương thức groupBy()agg() cùng nhau. Bên trong lời gọi agg(), có thể truyền nhiều hàm từ mô-đun pyspark.sql.functions. Ngoài ra, có thể áp dụng tổng hợp tùy chỉnh của Pandas cho các nhóm trong PySpark DataFrame bằng phương thức .applyInPandas().

Dưới đây là ví dụ cách triển khai tổng hợp tùy chỉnh trong PySpark: 

# Use groupBy and agg with Functions
from pyspark.sql import functions as F
df_from_csv.groupBy("house_id").agg(F.mean("price_discounted"))

# Use applyInPandas
def normalize_price(df):
    disc_price = df["discounted_price"]
    df["normalized_price"] = disc_price.mean() / disc_price.std()

df_from_csv.groupBy("house_id").applyInPandas(normalize_price)

Bạn đã gặp những thách thức nào khi làm việc với bộ dữ liệu lớn trong PySpark? Bạn đã vượt qua chúng ra sao?

Với câu hỏi này, chúng ta có thể liên hệ kinh nghiệm của chính mình và kể một trường hợp cụ thể gặp thách thức với PySpark và bộ dữ liệu lớn, có thể bao gồm một số điểm sau:

  • Quản lý bộ nhớ và sử dụng tài nguyên.
  • Lệch dữ liệu (data skew) và phân bổ khối lượng công việc không đều.
  • Tối ưu hiệu năng, đặc biệt cho biến đổi rộng và shuffle.
  • Gỡ lỗi và khắc phục sự cố job phức tạp.
  • Phân vùng và lưu trữ dữ liệu hiệu quả.

Để khắc phục, PySpark cung cấp phân vùng tập dữ liệu, cache kết quả trung gian, dùng các kỹ thuật tối ưu tích hợp, quản lý cụm vững chắc và tận dụng cơ chế chịu lỗi.

Bạn tích hợp PySpark với các công cụ và công nghệ khác trong hệ sinh thái dữ liệu lớn như thế nào?

PySpark tích hợp mạnh với nhiều công cụ dữ liệu lớn, bao gồm Hadoop, Hive, Kafka và HBase, cũng như lưu trữ đám mây như AWS S3 và Google Cloud Storage. Sự tích hợp này được thực hiện qua các connector, thư viện và API tích hợp sẵn của PySpark.

Một số thực hành tốt nhất để kiểm thử và gỡ lỗi ứng dụng PySpark là gì?

Một số thực hành được khuyến nghị để kiểm thử và gỡ lỗi ứng dụng PySpark gồm:

  • Viết unit test với pyspark.sql.test.SQLTestUtils cùng thư viện Python (pytest)

  • Gỡ lỗi ứng dụng và ghi log bằng thư viện logging cũng như Spark UI

  • Tối ưu hiệu năng bằng các API Spark org.apache.spark.metrics và công cụ giám sát hiệu năng.

Bạn sẽ xử lý các mối quan ngại về bảo mật và quyền riêng tư dữ liệu trong môi trường PySpark như thế nào?

Việc chia sẻ dữ liệu ngày nay trở nên dễ dàng hơn, nên bảo vệ thông tin nhạy cảm và bí mật là cách tốt để tránh rò rỉ dữ liệu. Một trong những thực hành tốt là áp dụng mã hóa dữ liệu trong quá trình xử lý và lưu trữ.

Trong PySpark, chúng ta có thể đạt được điều đó bằng cách sử dụng các hàm aes_encrypt()aes_decrypt() cho các cột trong DataFrame. Chúng ta cũng có thể dùng thư viện khác như cryptography để đạt mục tiêu này.

Mô tả cách sử dụng PySpark để xây dựng và triển khai mô hình machine learning.

PySpark cung cấp thư viện MLlib, một thư viện machine learning có khả năng mở rộng để xây dựng và triển khai mô hình trên các bộ dữ liệu lớn. API của thư viện này có thể dùng cho nhiều tác vụ trong quy trình ML như tiền xử lý dữ liệu, kỹ thuật đặc trưng, huấn luyện mô hình, đánh giá và triển khai. Sử dụng các cụm Spark, chúng ta có thể triển khai mô hình ML dựa trên PySpark vào sản xuất bằng suy luận theo lô hoặc theo luồng. 

Bạn có thể tối ưu các thao tác shuffle trong PySpark như thế nào?

Các thao tác shuffle xảy ra khi dữ liệu được phân phối lại giữa các partition và có thể tốn kém về hiệu năng. Để tối ưu shuffle:

  • Sử dụng repartition() một cách chiến lược để cân bằng partition trước các thao tác tốn kém như join.

  • Ưu tiên coalesce() thay vì repartition() khi giảm số partition, vì nó giảm di chuyển dữ liệu.

  • Broadcast các bảng nhỏ bằng broadcast() trước khi join với bảng lớn để tránh các thao tác cần nhiều shuffle.

  • Điều chỉnh cấu hình Spark như spark.sql.shuffle.partitions để tối ưu số lượng partition cho các thao tác shuffle.

Câu hỏi phỏng vấn PySpark cho Kỹ sư Dữ liệu

Nếu bạn đang phỏng vấn cho vị trí kỹ sư dữ liệu, hãy kỳ vọng các câu hỏi đánh giá khả năng thiết kế, tối ưu hóa và khắc phục sự cố ứng dụng PySpark trong môi trường sản xuất. Hãy cùng đi sâu vào một số câu hỏi điển hình bạn có thể gặp.

Hãy mô tả cách bạn tối ưu một job PySpark chạy chậm. Bạn sẽ xem xét những yếu tố chính nào?

Nếu một job PySpark chạy chậm, có một số khía cạnh chúng ta có thể cải thiện để tối ưu hiệu năng:

  • Đảm bảo kích thước và số lượng partition dữ liệu phù hợp để giảm thiểu shuffle trong quá trình biến đổi.
  • Sử dụng DataFrame thay cho RDD vì chúng đã dùng nhiều mô-đun tối ưu để cải thiện hiệu năng khối lượng công việc Spark.
  • Sử dụng join broadcast và biến broadcast khi join bộ dữ liệu nhỏ với bộ lớn.
  • Cache và persist các DataFrame trung gian được tái sử dụng.
  • Điều chỉnh số partition, số core của executor và số instance để sử dụng hiệu quả tài nguyên cụm.
  • Chọn định dạng tệp phù hợp để giảm kích thước dữ liệu.

Bạn đảm bảo khả năng chịu lỗi trong các ứng dụng PySpark như thế nào?

Để đảm bảo khả năng chịu lỗi trong ứng dụng PySpark, chúng ta có thể áp dụng một số chiến lược:

  • Sử dụng Checkpointing để lưu dữ liệu tại các điểm nhất định.
  • Nhân bản dữ liệu, lưu trên các máy khác nhau.
  • Giữ log về các thay đổi thực hiện trên dữ liệu trước khi chúng xảy ra.
  • Thực hiện các kiểm tra xác thực dữ liệu để quét tìm lỗi.
  • Chọn mức độ persist phù hợp.
  • Sử dụng cơ chế chịu lỗi tích hợp của Spark để tự động thử lại các tác vụ thất bại.

Những cách khác nhau để triển khai và quản lý ứng dụng PySpark là gì?

Chúng ta có thể triển khai và quản lý ứng dụng PySpark bằng các công cụ sau:

  • YARN: một trình quản lý tài nguyên giúp triển khai và quản lý ứng dụng trên các cụm Hadoop
  • Kubernetes: Spark hỗ trợ triển khai ứng dụng bằng các cụm Kubernetes
  • Databricks: Cung cấp nền tảng được quản lý toàn diện cho các ứng dụng PySpark, trừu tượng hóa sự phức tạp của quản lý cụm.

Để tìm hiểu thêm về Databricks, hãy xem khóa học Introduction to Databricks này.

Bạn cũng có thể tìm hiểu thêm về Kubernetes trong hướng dẫn Containerization: Docker and Kubernetes for Machine Learning.

Bạn sẽ giám sát và khắc phục sự cố các job PySpark chạy trong môi trường sản xuất như thế nào?

PySpark cung cấp cho chúng ta các công cụ sau để giám sát và khắc phục sự cố các job chạy trong môi trường sản xuất:

  • Spark UI: Giao diện web giúp theo dõi tiến độ job, sử dụng tài nguyên và thực thi tác vụ.
  • Ghi log: Có thể cấu hình logging để ghi lại thông tin chi tiết về lỗi và cảnh báo.
  • Chỉ số: Có thể dùng hệ thống giám sát để thu thập và phân tích các chỉ số liên quan đến sức khỏe cụm và hiệu năng job.

Giải thích sự khác nhau giữa phân bổ tài nguyên động (dynamic) và tĩnh (static) của Spark, và khi nào bạn sẽ chọn mỗi loại.

Trong Spark, phân bổ tĩnh đề cập tới việc cấp phát trước và cố định các tài nguyên như bộ nhớ và số lõi của executor trong suốt thời gian chạy ứng dụng. Ngược lại, phân bổ động cho phép Spark điều chỉnh số lượng executor dựa trên nhu cầu tải công việc. Tài nguyên có thể được thêm hoặc bớt khi cần, cải thiện sử dụng tài nguyên và giảm chi phí.

Bạn quyết định giữa việc dùng DataFrame và RDD trong PySpark như thế nào?

Lựa chọn giữa DataFrame và RDD phụ thuộc vào cấu trúc dữ liệu và loại thao tác bạn cần thực hiện.

  • Dùng DataFrame khi:
    • Bạn cần xử lý dữ liệu có cấu trúc dựa trên schema.
    • Bạn muốn thực thi tối ưu với Catalyst và Tungsten.
    • Bạn làm việc với truy vấn SQL và các phép biến đổi tích hợp sẵn.
  • Dùng RDD khi:
    • Bạn cần các biến đổi cấp thấp và kiểm soát chi tiết phép tính.
    • Bạn làm việc với dữ liệu không cấu trúc hoặc bán cấu trúc.
    • Bạn cần linh hoạt hơn trong việc định nghĩa biến đổi.

Bạn sẽ triển khai xử lý dữ liệu gia tăng (incremental) trong PySpark như thế nào?

Xử lý gia tăng rất cần thiết để xử lý hiệu quả các bộ dữ liệu tăng trưởng liên tục. Có thể triển khai bằng cách:

  • Sử dụng Delta Lake: Lưu trữ cập nhật ở định dạng Delta cho phép xử lý hiệu quả các thay đổi gia tăng.

  • Dùng watermarking với structured streaming: Giúp loại bỏ dữ liệu cũ trong khi vẫn duy trì các tổng hợp có trạng thái.

  • Phân vùng và lọc: Chỉ tải dữ liệu mới hoặc đã thay đổi thay vì xử lý lại toàn bộ.

  • Sử dụng checkpointing: Lưu kết quả trung gian để tránh xử lý lại từ đầu khi xảy ra lỗi.

Kết luận

Trong bài viết này, chúng ta đã bao quát một loạt câu hỏi phỏng vấn PySpark từ cơ bản, trung cấp đến nâng cao. Từ việc hiểu các khái niệm cốt lõi và ưu điểm của PySpark đến đi sâu vào các tối ưu hóa phức tạp và kỹ thuật khắc phục sự cố, chúng ta đã khám phá những lĩnh vực chính mà nhà tuyển dụng có thể quan tâm.

Nếu bạn cần đào tạo thêm về PySpark cho buổi phỏng vấn, hãy xem các khóa học sau:

Câu hỏi thường gặp

Tôi nên chuẩn bị cho phỏng vấn PySpark như thế nào?

Tập trung vào các khái niệm cốt lõi của PySpark, luyện tập các ví dụ mã, và xem lại các trường hợp sử dụng thực tế để thể hiện kinh nghiệm thực hành của bạn.

Những lỗi phổ biến nhất cần tránh trong một cuộc phỏng vấn PySpark là gì?

Tránh câu trả lời mơ hồ hoặc quá chung chung. Hãy cụ thể, đưa ví dụ và tập trung thể hiện sự hiểu biết rõ ràng về các nền tảng của PySpark.

Nếu thiếu kinh nghiệm thực tế, tôi có thể chuẩn bị phỏng vấn PySpark như thế nào?

Tập trung vào khái niệm lý thuyết, làm các dự án cá nhân, luyện các thử thách mã hóa, và làm nổi bật các kỹ năng liên quan.


Maria Eugenia Inzaugarat's photo
Author
Maria Eugenia Inzaugarat
Chủ đề

Tìm hiểu thêm về dữ liệu lớn với các khóa học này!

Courses

Nền tảng Big Data với PySpark

4 giờ
64.3K
Xem chi tiếtRight Arrow
Bắt đầu khóa học
Xem thêmRight Arrow