Apache Spark 4.0.1 preview hiện đã có trên Amazon EMR Serverless

Tác giả: Al MS, Emilie Faracci, and Karthik Prabhakar
Ngày phát hành: 26 JAN 2026
Chuyên mục: Advanced (300), Amazon EMR, Analytics, Announcements, Serverless

Amazon EMR Serverless hiện hỗ trợ Apache Spark 4.0.1 ở chế độ preview, giúp phân tích dữ liệu dễ tiếp cận hơn với nhiều người dùng, đơn giản hóa quy trình kỹ thuật dữ liệu và tăng cường khả năng quản trị. Bản phát hành này giới thiệu khả năng tuân thủ ANSI SQL, hỗ trợ kiểu dữ liệu VARIANT để xử lý JSON, hỗ trợ định dạng bảng Apache Iceberg v3 và các cải tiến về khả năng streaming. Bản preview này có sẵn ở tất cả các Region nơi EMR Serverless khả dụng.

Trong bài viết này, chúng tôi sẽ khám phá những lợi ích chính, khả năng kỹ thuật và các cân nhắc để bắt đầu với Spark 4.0.1 trên Amazon EMR Serverless—một tùy chọn triển khai serverless giúp đơn giản hóa việc chạy các framework dữ liệu lớn mã nguồn mở mà không yêu cầu quản lý cluster. Với nhãn phát hành emr-spark-8.0-preview, bạn có thể đánh giá các khả năng SQL mới, cải tiến API Python và cải tiến streaming trong môi trường EMR Serverless hiện có của mình.

Lợi ích

Spark 4.0.1 giúp bạn giải quyết các vấn đề kỹ thuật dữ liệu với những cải tiến cụ thể. Phần này cho thấy cách các khả năng mới hỗ trợ các tình huống thực tế.

Giúp phân tích dữ liệu dễ tiếp cận hơn với nhiều người dùng

Đơn giản hóa phát triển Extract Transform Load (ETL) bằng SQL scripting. Các kỹ sư dữ liệu thường chuyển đổi giữa SQL và Python để xây dựng logic ETL phức tạp với control flow. SQL scripting trong Spark 4.0.1 cho phép các vòng lặp, điều kiện và biến phiên trực tiếp trong SQL, giảm việc chuyển đổi ngữ cảnh và đơn giản hóa việc phát triển pipeline. Sử dụng cú pháp pipe (|>) để xâu chuỗi các hoạt động nhằm tạo ra các truy vấn dễ đọc và dễ bảo trì hơn.

Cải thiện chất lượng dữ liệu với chế độ ANSI SQL. Các lỗi chuyển đổi kiểu dữ liệu âm thầm có thể gây ra các vấn đề về chất lượng dữ liệu. Chế độ ANSI SQL (hiện là mặc định) thực thi hành vi SQL tiêu chuẩn, đưa ra lỗi cho các hoạt động không hợp lệ thay vì tạo ra kết quả không mong muốn. Quan trọng: Chế độ ANSI SQL hiện được bật theo mặc định. Hãy kiểm tra kỹ các truy vấn của bạn trong quá trình đánh giá bản preview này.

Đơn giản hóa quy trình kỹ thuật dữ liệu

Xử lý dữ liệu JSON hiệu quả với VARIANT. Các nhóm làm việc với dữ liệu bán cấu trúc thường gặp phải hiệu suất chậm do phân tích cú pháp JSON lặp đi lặp lại. Kiểu dữ liệu VARIANT lưu trữ JSON ở định dạng nhị phân được tối ưu hóa, loại bỏ chi phí phân tích cú pháp. Bạn có thể lưu trữ và truy vấn dữ liệu JSON hiệu quả trong data lake mà không cần sự cứng nhắc về schema.

Xây dựng các nguồn dữ liệu Python mà không cần Scala. Việc tích hợp các nguồn dữ liệu tùy chỉnh trước đây yêu cầu kiến thức chuyên sâu về Scala. API Python data Source cho phép bạn xây dựng các trình kết nối hoàn toàn bằng Python, sử dụng các kỹ năng và thư viện Python hiện có mà không cần học một ngôn ngữ mới.

Gỡ lỗi các ứng dụng streaming với queryable state. Việc khắc phục sự cố các ứng dụng streaming có trạng thái trước đây yêu cầu các phương pháp gián tiếp. Trình đọc nguồn dữ liệu trạng thái mới hiển thị trạng thái streaming dưới dạng DataFrames có thể truy vấn. Bạn có thể kiểm tra trạng thái trong quá trình gỡ lỗi, kiểm tra các giá trị trạng thái trong các bài kiểm tra đơn vị và chẩn đoán các sự cố sản xuất.

Tăng cường khả năng quản trị

Thiết lập các bản ghi kiểm toán toàn diện với Apache Iceberg v3. Định dạng bảng Apache Iceberg v3 cung cấp các đảm bảo giao dịch và theo dõi các thay đổi dữ liệu theo thời gian, cung cấp cho bạn các bản ghi kiểm toán cần thiết để tuân thủ quy định. Khi kết hợp với hỗ trợ kiểu dữ liệu VARIANT, bạn có thể duy trì các kiểm soát quản trị trong khi xử lý dữ liệu bán cấu trúc hiệu quả trong data lake.

Các khả năng chính

Spark 4.0.1 Preview trên EMR Serverless giới thiệu bốn lĩnh vực khả năng chính:

  1. Cải tiến SQL – chế độ ANSI, cú pháp pipe, kiểu VARIANT, SQL scripting, user-defined functions (UDFs)
  2. Tiến bộ API Python – nguồn dữ liệu tùy chỉnh, UDF profiling
  3. Cải tiến streaming – API xử lý có trạng thái v2, queryable state
  4. Hỗ trợ định dạng bảng – Amazon S3 Tables, tích hợp AWS Lake Formation

Các phần sau cung cấp chi tiết kỹ thuật và ví dụ mã cho từng khả năng.

Cải tiến SQL

Spark 4.0.1 giới thiệu các khả năng SQL mới bao gồm tuân thủ chế độ ANSI, SQL UDFs, cú pháp pipe cho các truy vấn dễ đọc, kiểu VARIANT để xử lý JSON và SQL scripting với control flow.

Chế độ ANSI SQL theo mặc định

Chế độ ANSI SQL hiện được bật theo mặc định, thực thi hành vi SQL tiêu chuẩn để đảm bảo tính toàn vẹn dữ liệu. Việc chuyển đổi kiểu dữ liệu âm thầm của các giá trị ngoài phạm vi hiện đưa ra lỗi thay vì tạo ra kết quả không mong muốn. Các truy vấn hiện có có thể hoạt động khác, đặc biệt là xung quanh việc xử lý null, chuyển đổi chuỗi và các hoạt động timestamp. Sử dụng spark.sql.ansi.enabled=false nếu bạn cần hành vi cũ trong quá trình di chuyển.

Cú pháp SQL pipe

Bạn hiện có thể xâu chuỗi các hoạt động SQL bằng cách sử dụng toán tử |> để cải thiện khả năng đọc. Ví dụ sau cho thấy cách bạn có thể thay thế các truy vấn con lồng nhau bằng một pipeline dễ bảo trì hơn:

FROM customer
|> LEFT OUTER JOIN orders ON c_custkey = o_custkey
|> AGGREGATE COUNT(o_orderkey) c_count GROUP BY c_custkey
|> AGGREGATE COUNT(*) AS custdist GROUP BY c_count
|> ORDER BY custdist DESC

Điều này thay thế các truy vấn con lồng nhau, giúp các phép biến đổi phức tạp dễ hiểu và dễ bảo trì hơn.

Kiểu dữ liệu VARIANT

Kiểu VARIANT xử lý dữ liệu JSON/XML bán cấu trúc hiệu quả mà không cần phân tích cú pháp lặp đi lặp lại. Nó sử dụng một biểu diễn nhị phân được tối ưu hóa bên trong trong khi vẫn duy trì tính linh hoạt không schema. Trước đây, các biểu thức JSON yêu cầu phân tích cú pháp lặp đi lặp lại, làm giảm hiệu suất. VARIANT loại bỏ chi phí này. Đoạn mã sau cho thấy cách phân tích cú pháp JSON thành kiểu VARIANT:

df = spark.sql("SELECT parse_json('{\"name\":\"Alice\",\"age\":30}') as data")

Spark 4.0.1 trên EMR Serverless hỗ trợ Apache Iceberg v3, cho phép kiểu dữ liệu VARIANT với các bảng Iceberg. Sự kết hợp này cung cấp khả năng lưu trữ và truy vấn hiệu quả dữ liệu JSON bán cấu trúc trong data lake của bạn. Lưu trữ các cột VARIANT trong các bảng Iceberg và sử dụng khả năng tiến hóa schema và time travel của Iceberg cùng với khả năng xử lý JSON được tối ưu hóa của Spark. Ví dụ sau cho thấy cách tạo một bảng Iceberg với một cột VARIANT:

CREATE TABLE catalog.db.events (
event_id BIGINT,
event_data VARIANT,
timestamp TIMESTAMP
) USING iceberg;
INSERT INTO catalog.db.events SELECT 1, parse_json('{"user":"alice","action":"login"}'), current_timestamp();

SQL scripting với session variables

Quản lý trạng thái và control flow trực tiếp trong SQL bằng cách sử dụng session variables và các câu lệnh IF/WHILE/FOR. Ví dụ sau minh họa một vòng lặp điền vào bảng kết quả:

BEGIN
DECLARE counter INT = 10;
WHILE counter > 0 DO
INSERT INTO results VALUES (counter);
SET counter = counter - 1;
END WHILE;
END

Điều này cho phép logic ETL phức tạp hoàn toàn trong SQL mà không cần chuyển sang Python.

SQL user-defined functions

Xác định các hàm tùy chỉnh trực tiếp trong SQL. Các hàm có thể là tạm thời (phạm vi phiên) hoặc vĩnh viễn (được lưu trữ trong catalog). Ví dụ sau cho thấy cách đăng ký và sử dụng một UDF đơn giản:

CREATE FUNCTION plusOne(x INT) RETURNS INT RETURN x + 1;
SELECT plusOne(5);

Tiến bộ API Python

Phần này bao gồm các khả năng Python mới bao gồm các nguồn dữ liệu tùy chỉnh và các công cụ UDF profiling.

API nguồn dữ liệu Python

Bạn hiện có thể xây dựng các nguồn dữ liệu tùy chỉnh bằng Python mà không cần kiến thức về Scala. Ví dụ sau cho thấy cách tạo một nguồn dữ liệu đơn giản trả về dữ liệu mẫu:

from pyspark.sql.datasource import DataSource, DataSourceReader
from pyspark.sql.types import StructType, StructField, StringType, IntegerType
class SampleDataSource(DataSource):
def schema(self):
return StructType([
StructField("name", StringType()),
StructField("age", IntegerType())
])
def reader(self, schema):
return SampleReader()
class SampleReader(DataSourceReader):
def read(self, partition):
yield ("Alice", 30)
yield ("Bob", 25)
# Register and use
spark.dataSource.register(SampleDataSource)
spark.read.format("SampleDataSource").load().show()

Unified UDF profiling

Profile Python và Pandas UDFs để có thông tin chi tiết về hiệu suất và bộ nhớ. Mã sau đây cho phép performance profiling: spark.conf.set("spark.sql.pyspark.udf.profiler", "perf") # or "memory"

Cải tiến Structured streaming

Phần này bao gồm các cải tiến đối với xử lý luồng có trạng thái, bao gồm queryable state và các API quản lý trạng thái nâng cao.

Arbitrary stateful processing API v2

Toán tử transformWithState cung cấp khả năng quản lý trạng thái mạnh mẽ với hỗ trợ timer và TTL để tự động dọn dẹp, khả năng tiến hóa schema và hỗ trợ trạng thái ban đầu để điền trước trạng thái từ batch DataFrames.

State data source reader

Truy vấn trạng thái streaming dưới dạng DataFrame để gỡ lỗi và giám sát. Trước đây, dữ liệu trạng thái là nội bộ đối với các truy vấn streaming. Giờ đây, bạn có thể xác minh các giá trị trạng thái trong các bài kiểm tra đơn vị, chẩn đoán các sự cố sản xuất, phát hiện lỗi trạng thái và tối ưu hóa hiệu suất. Lưu ý: Tính năng này là thử nghiệm. Các tùy chọn nguồn và hành vi có thể thay đổi trong các bản phát hành tương lai.

Cải tiến State store

Việc nâng cấp changelog checkpointing cho RocksDB loại bỏ các nút thắt cổ chai về hiệu suất. Phối hợp checkpointing nâng cao và quản lý tái sử dụng tệp sorted string table (SST) được cải thiện giúp tối ưu hóa các hoạt động streaming.

Hỗ trợ định dạng bảng

Phần này bao gồm hỗ trợ cho AWS S3 Tables và full table access (FTA) với AWS Lake Formation.

AWS S3 Tables

Sử dụng Spark 4.0.1 với AWS S3 Tables, một giải pháp lưu trữ cung cấp các bảng Apache Iceberg được quản lý với khả năng tối ưu hóa và bảo trì tự động. S3 Tables đơn giản hóa các hoạt động data lake bằng cách tự động xử lý việc nén, quản lý snapshot và dọn dẹp metadata.

Full table access với Lake Formation

FTA được hỗ trợ cho các bảng Apache Iceberg, Delta Lake và Apache Hive khi sử dụng AWS Lake Formation, một dịch vụ được quản lý giúp đơn giản hóa việc kiểm soát quyền truy cập dữ liệu. FTA cung cấp kiểm soát quyền truy cập thô ở cấp độ bảng. Lưu ý rằng kiểm soát quyền truy cập chi tiết (FGAC) với quyền cấp cột hoặc cấp hàng không khả dụng trong bản preview này.

Bắt đầu

Thực hiện các bước sau để tạo ứng dụng EMR Serverless, chạy mã mẫu để kiểm tra các tính năng mới và cung cấp phản hồi về bản preview.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy xác nhận bạn có những điều sau:

Lưu ý: EMR Studio Notebooks và SageMaker Unified Studio không được hỗ trợ trong bản preview này. Sử dụng AWS CLI hoặc AWS SDK để gửi công việc.

Bước 1: Tạo ứng dụng EMR Serverless của bạn

Tạo hoặc cập nhật ứng dụng của bạn với nhãn phát hành emr-spark-8.0-preview. Lệnh sau tạo một ứng dụng mới:

aws emr-serverless create-application --type spark \
--release-label emr-spark-8.0-preview \
--region us-east-1 --name spark4-test

Bước 2: Kiểm tra mã mẫu

Chạy công việc PySpark này để xác minh thiết lập và kiểm tra các tính năng của Spark 4.0.1:

from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("Spark 4.0.1 Test").getOrCreate()
print(f"Spark Version: {spark.version}")
# Create sample data
data = [("Alice", 34, "Engineering"), ("Bob", 45, "Sales"),
("Charlie", 28, "Engineering"), ("Diana", 52, "Marketing")]
df = spark.createDataFrame(data, ["name", "age", "department"])
df.createOrReplaceTempView("employees")
# Test SQL PIPE syntax
try:
result = spark.sql("""
FROM employees
|> WHERE age > 30
|> SELECT name, age, department
|> ORDER BY age DESC
""")
result.show()
print("✓ SQL pipe syntax test passed")
except Exception as e:
print(f"✗ SQL pipe syntax test failed: {e}")
# Test VARIANT data type
try:
json_data = spark.sql("""
SELECT parse_json('{"name":"Alice","skills":["Python","Spark","SQL"]}') as data
""")
json_data.show(truncate=False)
print("✓ VARIANT data type test passed")
except Exception as e:
print(f"✗ VARIANT data type test failed: {e}")

Gửi công việc bằng lệnh sau:

aws emr-serverless start-job-run \
--application-id <your-application-id> \
--execution-role-arn <your-execution-role-arn> \
--job-driver '{
"sparkSubmit": {
"entryPoint": "s3://<your-bucket>/spark_4_test.py",
"sparkSubmitParameters": "--conf spark.executor.cores=4 --conf spark.executor.memory=16g"
}
}'

Bước 3: Kiểm tra khối lượng công việc của bạn

Xem lại Hướng dẫn di chuyển Spark SQLHướng dẫn di chuyển PySpark, sau đó kiểm tra khối lượng công việc sản xuất trong môi trường phi sản xuất. Tập trung vào các truy vấn bị ảnh hưởng bởi chế độ ANSI SQL và đánh giá hiệu suất.

Bước 4: Dọn dẹp tài nguyên

Sau khi kiểm tra, hãy xóa tất cả các tài nguyên được tạo trong quá trình đánh giá này để tránh các khoản phí liên tục:

# Delete the EMR Serverless application
aws emr-serverless delete-application \
--application-id spark4-test \
--region us-east-1
# Remove the test script from S3
aws s3 rm s3://<your-bucket>/spark_4_test.py

Các cân nhắc khi di chuyển

Trước khi đánh giá Spark 4.0.1, hãy xem xét các yêu cầu thời gian chạy được cập nhật và các thay đổi hành vi có thể ảnh hưởng đến mã hiện có của bạn.

Yêu cầu thời gian chạy

  • Scala: Yêu cầu phiên bản 2.13.16 (hỗ trợ 2.12 đã bị loại bỏ)
  • Java: Yêu cầu JDK 17 trở lên (hỗ trợ JDK 8 và 11 đã bị loại bỏ)
  • Python: Yêu cầu phiên bản 3.9+, tiếp tục hỗ trợ 3.11 và mới thêm 3.12 (hỗ trợ 3.8 đã bị loại bỏ)
  • Pandas: Phiên bản tối thiểu 2.0.0 (trước đây là 1.0.5)
  • SparkR: Đã bị phản đối; di chuyển sang PySpark

Thay đổi hành vi

Với việc thực thi chế độ ANSI SQL, bạn có thể thấy hành vi khác trong:

  • Xử lý Null: Truyền null nghiêm ngặt hơn trong các biểu thức
  • Chuyển đổi chuỗi: Các chuyển đổi không hợp lệ hiện đưa ra lỗi thay vì trả về null
  • Các hoạt động khóa Map: Các khóa trùng lặp hiện đưa ra lỗi
  • Chuyển đổi Timestamp: Tràn trả về null thay vì các giá trị được bao bọc
  • Các câu lệnh CREATE TABLE: Hiện tuân thủ cấu hình spark.sql.sources.default thay vì mặc định là định dạng Hive khi các mệnh đề USING hoặc STORED AS bị bỏ qua

Bạn có thể kiểm soát nhiều hành vi này thông qua các cờ cấu hình cũ. Tham khảo các hướng dẫn di chuyển chính thức để biết chi tiết: Hướng dẫn di chuyển Spark SQL: 3.5 đến 4.0Hướng dẫn di chuyển PySpark: 3.5 đến 4.0.

Hạn chế của bản preview

Các khả năng sau không khả dụng trong bản preview này:

  • Kiểm soát quyền truy cập chi tiết: Kiểm soát quyền truy cập chi tiết (FGAC) với lọc cấp hàng hoặc cấp cột không được hỗ trợ trong bản preview này. Các công việc với spark.emr-serverless.lakeformation.enabled=true sẽ thất bại.
  • Spark Connect: Không được hỗ trợ trong bản preview này. Sử dụng gửi công việc Spark tiêu chuẩn với API StartJobRun.
  • Hạn chế định dạng bảng mở: Hudi không được hỗ trợ trong bản preview này. Delta 4.0.0 không hỗ trợ các trình kết nối Flink (đã bị phản đối trong Delta 4.0.0). Delta Universal Format không được hỗ trợ trong bản preview này.
  • Trình kết nối: spark-sql-kinesis, emr-dynamodb và spark-redshift không khả dụng.
  • Ứng dụng tương tác: Livy và JupyterEnterpriseGateway không được bao gồm. Ngoài ra, SageMaker Unified Studio và EMR Studio không được hỗ trợ.
  • Các tính năng EMR: Serverless Storage và Materialized Views không được hỗ trợ.

Bản preview này cho phép bạn đánh giá các khả năng cốt lõi của Spark 4.0.1 trên EMR Serverless, bao gồm các cải tiến SQL, cải tiến API Python và quản lý trạng thái streaming. Kiểm tra đường dẫn di chuyển của bạn, đánh giá các cải tiến hiệu suất và cung cấp phản hồi để định hình bản phát hành khả dụng rộng rãi.

Kết luận

Bài viết này đã hướng dẫn bạn cách bắt đầu với bản preview Apache Spark 4.0.1 trên Amazon EMR Serverless. Bạn đã khám phá cách kiểu dữ liệu VARIANT hoạt động với Iceberg v3 để xử lý dữ liệu JSON hiệu quả, cách SQL scripting và cú pháp pipe loại bỏ việc chuyển đổi ngữ cảnh để phát triển ETL và cách queryable streaming state đơn giản hóa việc gỡ lỗi các ứng dụng có trạng thái. Bạn cũng đã tìm hiểu về các hạn chế của bản preview, yêu cầu thời gian chạy và các thay đổi hành vi cần xem xét trong quá trình đánh giá.

Hãy kiểm tra bản preview Spark 4.0.1 trên EMR Serverless và cung cấp phản hồi thông qua AWS Support để giúp định hình bản phát hành khả dụng rộng rãi.

Để tìm hiểu thêm về các tính năng của Apache Spark 4.0.1, hãy xem Ghi chú phát hành Spark 4.0.1. Để biết tài liệu EMR Serverless, hãy xem Hướng dẫn phát hành EMR.

Tài nguyên

Tài liệu Apache Spark

Tài nguyên Amazon EMR


Về tác giả

Al MS

Al MS

Al là giám đốc sản phẩm cho Amazon EMR tại Amazon Web Services.

Emilie Faracci

Emilie Faracci

Emilie là Kỹ sư Phát triển Phần mềm tại Amazon Web Services, làm việc trên Amazon EMR. Cô tập trung vào phát triển Spark và đã đóng góp cho Apache Spark v4.0.1 mã nguồn mở.

Karthik Prabhakar

Karthik Prabhakar

Karthik là Kiến trúc sư Công cụ Xử lý Dữ liệu cho Amazon EMR tại AWS. Anh chuyên về kiến trúc hệ thống phân tán và tối ưu hóa truy vấn, làm việc với khách hàng để giải quyết các thách thức hiệu suất phức tạp trong khối lượng công việc xử lý dữ liệu quy mô lớn. Trọng tâm của anh bao gồm các chi tiết nội bộ của công cụ, chiến lược tối ưu hóa chi phí và các mẫu kiến trúc cho phép khách hàng chạy phân tích quy mô petabyte một cách hiệu quả.