LogoDuyệtSr. Data Engineer
HomeAboutPhotosInsightsCV

Footer

Logo

Resources

  • Rust Tiếng Việt
  • /archives
  • /series
  • /tags
  • Status

me@duyet.net

  • About
  • LinkedIn
  • Resume
  • Projects

© 2026 duyet.net | Sr. Data Engineer | 2026-02-27

Spark: Convert Text (CSV) to Parquet để tối ưu hóa Spark SQL và HDFS

Note: This post is over 10 years old. The information may be outdated.

Lưu trữ dữ liệu dưới dạng Columnar như Apache Parquet [1] (https://parquet.apache.org) góp phần tăng hiệu năng truy xuất trên Spark lên rất nhiều lần. Bởi vì nó có thể tính toán và chỉ lấy ra 1 phần dữ liệu cần thiết (như 1 vài cột trên CSV), mà không cần phải đụng tới các phần khác của data row. Ngoài ra Parquet còn hỗ trợ flexible compression do đó tiết kiệm được rất nhiều không gian HDFS.

Nếu bạn chứa dữ liệu dạng text trên HDFS và dùng Spark SQL để xử lý, một biện pháp tối ưu bạn nên thử là chuyển đổi text đó sang Parquet, tăng tốc độ truy xuất và tối ưu bộ nhớ.

Theo một bài viết của IBM[2], chuyển đổi sang Parquet giúp tăng tốc độ truy xuất lên 30 lần (hoặc hơn) tùy trường hợp, bộ nhớ tiết kiệm đến 75%!

Let’s convert to Parquet!

Spark SQL hỗ trợ đọc và ghi Parquet files, và giữ nguyên được meta data. Parquet schema cho phép data files "self-explanatory" to the Spark SQL applications.

Đoạn chương trình sau sử dụng databricks.csv để đọc flat file, sau đó lưu lại dạng Parquet kèm Schema.

Đoạn mã trên tự động convert tất cả các file hadoopdsPath+"/catalog_page/* và lưu Parquet vào thư mục /user/spark/data/parquet/, mặc định Spark sử dụng chuẩn nén gzip, bạn có thể sử dụng compression codec uncompressed, snappy, hoặc lzo.

Convert 1TB mất bao lâu?

Mất 50 phút, tức khoảng 20GB/phút khi sử dụng 6-datanode Spark 1.5.1. Tổng lượng bộ nhớ sử dụng là 500GB. Kết quả Parquet files trên HDFS có dạng:

hdfs:///user/spark/data/parquet1000g/catalog_page/_SUCCESS
hdfs:///user/spark/data/parquet1000g/catalog_page/_common_metadata
hdfs:///user/spark/data/parquet1000g/catalog_page/_metadata
hdfs:///user/spark/data/parquet1000g/catalog_page/part-r-00000-a9341639-a804-45bd-b594-8e58220190f4.gz.parquet
hdfs:///user/spark/data/parquet1000g/catalog_page/part-r-00001-a9341639-a804-45bd-b594-8e58220190f4.gz.parquet

Bộ nhớ tiết kiệm được

$ hadoop fs -du -h -s /user/spark/data/text1000g897.9 G  /user/spark/data/text1000g
$ hadoop fs -du -h -s /user/spark/data/parquet1000g231.4 G  /user/spark/data/parquet1000g

Từ 897.9GB text, với Parquet chỉ còn lại 231.4GB, tiết kiệm được khoảng 75%.

Tham khảo

  • [1] Apache Parquet - https://parquet.apache.org/
  • [2] How-to: Convert Text to Parquet in Spark to Boost Performance
  • [3] Performance impact of accessing TIMESTAMP fields from Big SQL with Parquet MR files
Sep 21, 2016·9 years ago
|Data Engineering|
Data EngineeringApache SparkPythonBig Data
|Edit|

Related Posts

Cài Apache Spark standalone bản pre-built

Mình nhận được nhiều phản hồi từ bài viết BigData - Cài đặt Apache Spark trên Ubuntu 14.04 rằng sao cài khó và phức tạp thế. Thực ra bài viết đó mình hướng dẫn cách build và install từ source.

May 31, 2017·9 years ago
Read more

vnTokenizer trên PySpark

Trong blog này mình sẽ custom lại vn.vitk để có thể chạy như một thư viện lập trình, sử dụng ngôn ngữ python (trên PySpark và Jupyter Notebook).

Dec 14, 2016·9 years ago
Read more

PySpark - Thiếu thư viện Python trên Worker

Apache Spark chạy trên Cluster, với Java thì đơn giản. Với Python thì package python phải được cài trên từng Node của Worker. Nếu không bạn sẽ gặp phải lỗi thiếu thư viện.

Sep 8, 2016·9 years ago
Read more

Spark on Kubernetes Performance Tuning

Spark Performance tuning is a process to improve the performance of Spark. In this post, I will focus on Spark running on Kubernetes.

Apr 10, 2021·5 years ago
Read more
On this page
  • Let’s convert to Parquet!
  • Convert 1TB mất bao lâu?
  • Tham khảo
On this page
  • Let’s convert to Parquet!
  • Convert 1TB mất bao lâu?
  • Tham khảo