การรันคิวรีอย่างมีประสิทธิภาพ

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

Liam Brannigan

Data Scientist & Polars Contributor

แนะนำผู้สอน

$$

$$

  • Liam Brannigan, Lead Data Scientist
  • ML and Data Engineering Specialist
  • Polars contributor

รูปของ Liam Brannigan ผู้สอนในคอร์สนี้

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

จากแล็ปท็อปสู่คลาวด์

Polars pipeline ที่ขยายจากแล็ปท็อปสู่คลาวด์

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คอร์สนี้เหมาะกับคุณไหม?

หน้าคอร์ส Polars

  • สร้าง lazy query ด้วย scan_csv
  • เขียน expression ด้วย filter, select, และ group_by
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

บทที่ 1 - การปรับแต่งคิวรี

การปรับแต่งคิวรี

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

บทที่ 1 - การปรับแต่งคิวรี

การปรับแต่งคิวรี

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

บทที่ 2 - I/O อย่างมีประสิทธิภาพ

ภาพ Polars รับข้อมูลจากไฟล์หลายประเภท

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

บทที่ 3 - ประเภทข้อมูลที่หลากหลายขึ้น

ไดอะแกรมแสดงข้อมูลแบบ nested ที่แปลงเป็นตาราง

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

บทที่ 4 - การขยาย pipeline

ภาพตารางขนาดใหญ่กำลังถูก stream

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ชุดข้อมูลคำร้องของชิคาโก

ทีมวิเคราะห์ข้อมูลของนายกเทศมนตรีชิคาโก

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ตรวจสอบชุดข้อมูล

requests = pl.scan_csv("311_Service_Requests.csv",try_parse_dates=True)

ชุดข้อมูลขนาดใหญ่ที่บันทึกคำร้องทุกรายการจากประชาชนชิคาโก

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ตรวจสอบชุดข้อมูล

requests.collect()
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

ตรวจสอบชุดข้อมูล

requests.collect().head(5)
shape: (5, 39)
| TYPE                          | STATUS    | DEPARTMENT     | CREATED_DATE        | ... |
| ---                           | ---       | ---            | ---                 | --- |
| str                           | str       | str            | str                 | ... |
|-------------------------------|-----------|----------------|---------------------|-----|
| Pothole in Street Complaint   | Completed | Transportation | 2019-12-16T10:09:08 | ... |
| Tree Trim Request             | Cancelled | Sanitation     | 2019-09-18T01:05:08 | ... |
| Garbage Cart Maintenance      | Completed | Sanitation     | 2021-01-24T09:14:58 | ... |
| Pothole in Street Complaint   | Completed | Transportation | 2019-03-21T10:41:01 | ... |
| Recycling Pick Up             | Completed | Sanitation     | 2021-02-16T08:28:59 | ... |
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

จำกัดจำนวนแถวที่ประมวลผล

requests.head(5)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

จำกัดจำนวนแถวที่ประมวลผล

requests.head(5).collect()
shape: (5, 39)
| TYPE                            | STATUS    | DEPARTMENT     | CREATED_DATE        | ... |
| ---                             | ---       | ---            | ---                 | --- |
| str                             | str       | str            | str                 | ... |
|---------------------------------|-----------|----------------|---------------------|-----|
| Pothole in Street Complaint     | Completed | Transportation | 2019-12-16T10:09:08 | ... |
| Tree Trim Request | Completed | Sanitation     | 2019-09-18T01:05:08 | ... |
| Garbage Cart Maintenance        | Completed | Sanitation     | 2021-01-24T09:14:58 | ... |
| Pothole in Street Complaint     | Completed | Transportation | 2019-03-21T10:41:01 | ... |
| Recycling Pick Up               | Completed | Sanitation     | 2021-02-16T08:28:59 | ... |
  • เรียก collect ให้ช้าที่สุดเท่าที่เป็นไปได้
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีสรุปข้อมูลรายแผนก

completed_by_department


การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีสรุปข้อมูลรายแผนก

completed_by_department = requests


การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีสรุปข้อมูลรายแผนก

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีสรุปข้อมูลรายแผนก

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).collect()
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีสรุปข้อมูลรายแผนก

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).collect().group_by("DEPARTMENT").len()
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีสรุปข้อมูลรายแผนก

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("DEPARTMENT").len().collect()
shape: (10, 2)
| DEPARTMENT                     | len     |
| ---                            | ---     |
| str                            | u32     |
|-------------------------------|---------|
| 311 City Services              | 4859161 |
| Sanitation                     | 3406631 |
| Aviation                       | 2337842 |
| CDOT - Department of Transport | 1468240 |
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

คิวรีที่แยกสาขาออกจากกัน

completed_by_department = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("DEPARTMENT").len()
completed_by_month = requests.filter(
    pl.col("STATUS") == "Completed"
).group_by("MONTH").len()
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

วิธีที่ทีมใช้งานในปัจจุบัน

completed_by_department.collect()
completed_by_month.collect()
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

รันคิวรีที่แยกสาขาพร้อมกัน

results = pl.collect_all(


)
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

รันคิวรีที่แยกสาขาพร้อมกัน

results = pl.collect_all([
    completed_by_department,
    completed_by_month,
])
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

รันคิวรีที่แยกสาขาพร้อมกัน

results[0]  # completed_by_department
shape: (10, 2)
| DEPARTMENT           | len     |
| ---                  | ---     |
| str                  | u32     |
|----------------------|---------|
| 311 City Services    | 4859161 |
| Sanitation           | 3406631 |
| Aviation             | 2337842 |
| Transport            | 1468240 |
results[1]  # completed_by_month
shape: (12, 2)
| MONTH | len  |
| ---   | ---  |
| i64   | u32  |
|-------|------|
| 1     | 2506 |
| 2     | 4566 |
| 3     | 2739 |
| 4     | 2922 |
การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

มาฝึกกันเถอะ!

การปรับขนาดและเพิ่มประสิทธิภาพ Data Pipeline ด้วย Polars

Preparing Video For Download...