Bu konu, verileri işlemek amacıyla yerel bir dizine indirmekten kaçınmak veya verileri çevrimiçi olarak işlemek için PyODPS düğümünün nasıl kullanılacağını açıklar.
Arka plan bilgileri
PyODPS, verileri yerel bir dizine indirmek için birden çok yöntem sunar. Verileri işleyip MaxCompute'e yüklemek üzere yerel bir dizine indirebilirsiniz. Ancak, verileri yerel bir dizine indirdiğinizde MaxCompute'in yüksek düzeyde paralel işleme özelliğinden yararlanılamayacağından yerel veri işleme verimsizdir. Veri birimi 10 MB'tan büyükse verileri işlemek için yerel bir dizine indirmemenizi öneririz. Verileri yerel bir dizine indirmek için aşağıdaki yöntemlerden birini kullanabilirsiniz:
head, tail veya to_pandas yöntemini kullanın. Küçük veri birimlerini elde etmek için çoğunlukla
headveyatailyöntemini kullanın. Büyük veri birimleri elde etmek istiyorsanız verileri bir MaxCompute tablosunda depolamak için persist yöntemini kullanın. Daha fazla bilgi için bkz. Sonuçları yürütme ve alma.open_reader yöntemini kullanın. Verileri elde etmek için bir tablo veya SQL örneği üzerinde open_reader çalıştırabilirsiniz. Büyük veri birimlerini işlemek gerekiyorsa PyODPS DataFrame veya MaxCompute SQL kullanmanızı öneririz. PyODPS DataFrame nesnesi, bir MaxCompute tablosuna dayanarak oluşturulur. Bu yöntem, yerel veri işlemeye göre daha yüksek verimlilik sağlar.
Örnek kod
Bir JSON dizesini birden çok satıra dönüştürün. Her satır bir anahtardan ve değerinden oluşur.
-
Yerel test için küçük veri birimlerini elde etmek amacıyla
headyöntemini kullanınIn [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 3 -
Çevrimiçi üretim için büyük veri birimlerini bir MaxCompute tablosunda depolamak üzere
persistyöntemini kullanınIn [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')