เอา 🦆 (duckdb) กับ 🐻‍❄️ (polars) มาสู้กับ ⚡️ (spark) มาดูกันว่าใครชนะ 😎

ได้ยินเสียงลือเสียงเล่าอ้างมานาน เคยใช้มาบ้าง แต่อยากรู้ ว่า ถ้าต้องชนกันจริงๆ จะสะบักสะบอมกันขนาดไหน ก็เลยเป็นที่มาของการรังแก framework แล้วเอามาวัดผล :joy:

ขั้นตอน ก็คือ:

  1. แบ่งดาต้าเป็นช่วงๆ แต่ละช่วงมี 8 partitions เท่าๆ กัน
  2. ทำ datediff แล้วแปลงเป็น นาที
  3. หา percentile ของ datediff แล้วตัดเฉพาะ between 0.2, 0.8
  4. group by 2 columns
  5. agg กับ 3 columns, โดยมีทั้ง min, max, avg

และนี่ คือผลที่ได้:

จะเห็นได้ว่า น้องเป็ด เน่าไปตั้งแต่ 30M rows
polars ไวจริงไม่เถียง แต่ swap usage ก็วิ่งตามเป็นเงา
ส่วน spark เน้นมาราธอน ไม่รีบ แต่ก็ไม่กินที่ swap

ที่ฮามาก คือ spark runtime กับ polars swap usage มันไปทางเดียวกัน!

ใครแม่น stats น่าจะอธิบายได้ดีกว่ามนุด engineer อย่างเราๆ :laughing:

มี repo อยู่นี่ เผื่ออยากไปลองกับดาต้าของตัวเอง

2 Likes

Polars นี่ lightning-fast สมชื่อจริง

เสียใจน้องเป็ด… :smiling_face_with_tear:

อัพเดท: รอบแรกใจดี ให้ window กับ single-key partition

รอบนี้ window + groupby กับ year/month partition ตั้งแต่ปี 2017-2022 = 6 year * 12 month = 72 partitions

image

หมีขาว น็อคคคค :dizzy_face:

จะเห็นได้ว่า ถ้าเป็น window on single partition หมีขาวไวกว่า
แต่ ถ้า window on multiple partition เมื่อไหร่ แรม++ runtime++ :scream:

2 Likes