การกรองไฟล์ปาร์เก้เมื่ออ่านด้วย PySpark

ฉันมีชุดข้อมูลขนาดใหญ่ของไฟล์ Parquet ที่แบ่งพาร์ติชันซึ่งจัดเก็บไว้ใน AWS s3 และฉันต้องการอ่านเฉพาะตัวอย่างจากข้อมูลในแต่ละเดือนโดยใช้ AWS EMR ฉันต้องกรองข้อมูลในแต่ละเดือนด้วยค่า "user_id" โดยเลือก เช่น ข้อมูลจากผู้ใช้ 100,000 ราย (จากหลายล้านคน) และเขียนการรวมกลุ่มกลับไปที่ s3

ฉันรู้วิธีอ่านและเขียนไปยัง s3 โดยใช้คลัสเตอร์ EMR แต่ฉันทดสอบกับชุดข้อมูลขนาดเล็กมาก สำหรับชุดข้อมูลจริงฉันต้องกรองข้อมูลเพื่อให้สามารถประมวลผลได้ จะทำสิ่งนี้โดยใช้ pyspark ได้อย่างไร?


comment
ผู้ใช้ 100,000 รายที่คุณต้องการกรองจะถูกจัดเก็บไว้ในคอลเลกชันในดาต้าเฟรมหรือคุณแค่ต้องการผู้ใช้แบบสุ่ม   -  person LizardKing    schedule 19.11.2019
comment
จริงๆ แล้วฉันเก็บพวกมันไว้ไม่ใช่ในฐานะผู้ใช้ แต่เป็นกิจกรรมที่ดำเนินการโดยผู้ใช้ ฉันมีสคริปต์ที่เขียนขึ้นเพื่อแปลงไฟล์ระดับเหตุการณ์นี้เป็นตารางระดับผู้ใช้ แต่ตอนนี้ฉันกำลังประสบปัญหาการอ่านจากไฟล์ปาร์เก้ที่แบ่งพาร์ติชัน   -  person RafaJM    schedule 19.11.2019


คำตอบ (1)


Spark มีการแปลงตัวอย่างหลายรายการ df.sample(...) คือสิ่งที่คุณต้องการในกรณีของคุณ ดูคำตอบนี้

หากคุณต้องการผลลัพธ์จำนวนที่แน่นอนกลับมา คุณต้อง (a) สุ่มตัวอย่างมากเกินไปเล็กน้อย จากนั้น (b) ใช้ df.limit() เพื่อให้ได้จำนวนที่แน่นอน

หากคุณสามารถจัดการกับเศษส่วนเพียงเศษส่วนได้ แทนที่จะต้องนับเป้าหมาย คุณสามารถประหยัดได้ df.count

person Sim    schedule 19.11.2019
comment
ขอบคุณ คำตอบนี้เพียงพอสำหรับสิ่งที่ฉันถาม แม้ว่าปัญหาของฉันจะพัฒนาไปสู่สิ่งที่ฉันถามในเวอร์ชันที่เฉพาะเจาะจงมากขึ้นก็ตาม ขอบคุณนะ :) - person RafaJM; 19.11.2019