Topik ini menjelaskan cara menggunakan node PyODPS untuk menghindari pengunduhan data ke direktori lokal dan memproses data secara online.
Informasi latar belakang
PyODPS menyediakan beberapa metode untuk mengunduh data ke direktori lokal. Anda dapat mengunduh data ke direktori lokal untuk diproses, lalu mengunggahnya kembali ke MaxCompute. Namun, pemrosesan data lokal tidak efisien karena kemampuan pemrosesan paralel masif dari MaxCompute tidak dapat dimanfaatkan jika data diunduh ke direktori lokal. Jika volume data lebih besar dari 10 MB, disarankan untuk tidak mengunduh data ke direktori lokal. Berikut adalah metode yang dapat digunakan:
Gunakan metode head, tail, atau to_pandas. Dalam sebagian besar kasus, gunakan metode
headatautailuntuk mendapatkan volume data yang kecil. Jika Anda ingin mendapatkan volume data yang besar, gunakan metode persist untuk menyimpan data dalam tabel MaxCompute. Untuk informasi lebih lanjut, lihat Eksekusi.Gunakan metode open_reader. Anda dapat menjalankan open_reader pada tabel atau instance SQL untuk mendapatkan data. Untuk volume data besar, disarankan menggunakan PyODPS DataFrame atau MaxCompute SQL. Objek PyODPS DataFrame dibuat berdasarkan tabel MaxCompute, memberikan efisiensi lebih tinggi dibandingkan pemrosesan data lokal.
Kode contoh
Ubah string JSON menjadi beberapa baris, dengan setiap baris terdiri dari kunci dan nilainya.
Untuk pengujian lokal, gunakan metode
headuntuk mendapatkan volume data kecil.In [12]: df.head(2) json 0 {"a": 1, "b": 2} 1 {"c": 4, "b": 3} In [14]: from odps.df import output In [16]: @output(['k', 'v'], ['string', 'int']) ...: def h(row): ...: import json ...: for k, v in json.loads(row.json).items(): ...: yield k, v ...: In [21]: df.apply(h, axis=1).head(4) k v 0 a 1 1 b 2 2 c 4 3 b 3Untuk produksi online, gunakan metode
persistuntuk menyimpan volume data besar dalam tabel MaxCompute.In [14]: from odps.df import output In [16]: @output(['k', 'v'], ['string', 'int']) ...: def h(row): ...: import json ...: for k, v in json.loads(row.json).items(): ...: yield k, v ...: In [21]: df.apply(h, axis=1).persist('my_table')