Memfilter file parket yang sedang dibaca dengan PySpark

Saya memiliki kumpulan data besar file parket yang dipartisi yang disimpan di AWS s3 dan saya hanya ingin membaca sampel dari data setiap bulan menggunakan AWS EMR. Saya harus memfilter data setiap bulan berdasarkan nilai "user_id" dengan memilih, misalnya, data dari 100.000 pengguna (dari jutaan) dan menulis agregasi kembali ke s3.

Saya menemukan cara membaca dan menulis ke s3 menggunakan cluster EMR, tetapi saya mengujinya pada kumpulan data yang sangat kecil. Untuk dataset sebenarnya, saya perlu memfilter data agar dapat memprosesnya. Bagaimana cara melakukan ini menggunakan pyspark?


person RafaJM    schedule 19.11.2019    source sumber
comment
100.000 pengguna yang ingin Anda filter disimpan dalam koleksi, dalam kerangka data atau Anda hanya ingin beberapa pengguna acak?   -  person LizardKing    schedule 19.11.2019
comment
Saya sebenarnya menyimpannya bukan sebagai pengguna, tetapi peristiwa yang dilakukan oleh pengguna. Saya sudah memiliki skrip tertulis untuk mengubah file tingkat acara ini menjadi tabel tingkat pengguna, tetapi sekarang saya menghadapi masalah membaca dari file parket yang dipartisi   -  person RafaJM    schedule 19.11.2019


Jawaban (1)


Spark memiliki beberapa transformasi pengambilan sampel. df.sample(...) adalah yang Anda inginkan dalam kasus Anda. Lihat jawaban ini.

Jika Anda memerlukan jumlah hasil yang tepat, Anda harus (a) mengambil sampel berlebih sedikit dan kemudian (b) menggunakan df.limit() untuk mendapatkan jumlah pastinya.

Jika Anda dapat menangani hanya sebagian kecil saja, dibandingkan dengan jumlah target, Anda dapat menghemat df.count.

person Sim    schedule 19.11.2019
comment
Terima kasih, jawaban ini cukup untuk apa yang saya tanyakan, meskipun masalah saya berkembang ke versi yang lebih spesifik dari apa yang saya tanyakan. Terima kasih :) - person RafaJM; 19.11.2019