PyODPS DataFrame kullanırken kodunuz iki farklı ortamda çalışır: yerel makineniz (on-premises ortamı) ve cloud üzerindeki MaxCompute yürütücüsü. map, apply, map_reduce veya özel toplama işlemlerine aktardığınız işlevler yerel olarak değil, MaxCompute yürütücüsü içinde çalıştırılır. Bu sınırı anlamak; içe aktarma hatalarını, paket çakışmalarını ve veri erişimi sorunlarını önlemenize yardımcı olur.
Yürütme modeli
PyODPS bir Python uygulaması değil, bir Python paketidir. Standart Python ortamlarında çalışır ve yaygın Python yorumlayıcıları gibi davranır.
Aşağıdaki örneği inceleyin:
from odps import ODPS, options
import numpy as np
o = ODPS(...)
df = o.get_table('pyodps_iris').to_df()
coeffs = [0.1, 0.2, 0.4]
def handle(v):
import numpy as np
return float(np.cosh(v)) * sum(coeffs)
options.df.supersede_libraries = True
val = df.sepal_length.map(handle).sum().execute(libraries=['numpy.zip', 'other.zip'])
print(np.sinh(val))
Aşağıdaki diyagram, bu kod çalıştırıldığında devreye giren sistemleri gösterir. MaxCompute dışındaki her şey on-premises ortamına aittir.

handle işlev gövdesi hariç tüm kod on-premises ortamında çalışır. handle işlevi map öğesine aktarılır ancak burada çağrılmaz; bunun yerine MaxCompute’e gönderilir ve uzaktan yürütülür.
handle MaxCompute arka ucu ile map öğesine aktarıldığında PyODPS bunu üç aşamada işler:
cloudpickle modülü, işlevden kapanışı (closure) ve bytecode değerlerini ayıklar.
PyODPS DataFrame, kapanış ve bytecode kullanarak bir Python kullanıcı tanımlı işlevi (UDF) oluşturur ve bunu MaxCompute’e gönderir.
MaxCompute’te SQL deyimleriyle işleri çalıştırdığınızda oluşturulan Python UDF çağrılır, bytecode ve kapanış unpickle edilir ve UDF bir MaxCompute yürütücüsünde çalıştırılır.
Yürütme sınırı
|
|
|
|
|
|
|
|
|
|
|
|
MaxCompute yürütücüsündeki kısıtlamalar
MaxCompute arka ucu etkin olduğunda map, apply, map_reduce veya özel toplama işlevlerine aktardığınız herhangi bir işlev gövdesi için aşağıdaki kısıtlamalar geçerlidir.
Yerel paketler kullanılamaz. İşlev gövdesi içinde yalnızca MaxCompute yürütücülerinde bulunan paketlere başvurabilirsiniz. Yukarıdaki örnekte, libraries=['numpy.zip', 'other.zip'] içinde listelenen other.zip bir MaxCompute kaynağı olarak mevcut olmalıdır. On-premises ortamında yoksa MaxCompute’e yüklemek yeterli değildir.
Paketleri işlev gövdesi içinde içe aktarın. Bir paketi işlev dışında içe aktarıp işlev içinde referans verirseniz hata alabilirsiniz. cloudpickle, on-premises paket referansını gönderir ancak paket yapısı MaxCompute yürütücüsüyle uyumlu olmayabilir. Bunun yerine örnekteki handle işlevinde gösterildiği gibi paketi işlev gövdesi içinde içe aktarın.
Dış değişkenler değere göre yakalanır. İşlev dışında tanımlanan bir değişkene (örneğin örnekteki coeffs) başvurup işlev gövdesi içinde değiştirdiğinizde on-premises değeri korunur. Değişiklik on-premises ortamına yansımaz.
Diğer dosyalardaki kod yürütücüde bulunmalıdır. İşlev gövdesi başka bir dosyadaki koda başvuruyorsa o dosyayı içeren paketin MaxCompute yürütücüsünde mevcut olması gerekir. Üçüncü taraf kaynağı olarak paketlemeyi tercih etmiyorsanız başvurulan kişisel kodların tümünü aynı dosyada saklayın.
Üçüncü taraf paketler Python 2.7 (UCS-2) ile entegre edilmelidir. Yüklenen üçüncü taraf paketin, MaxCompute yürütücüsünde UCS-2 kullanan Python 2.7 ile entegre edilmesi gerekir.
Diğer MaxCompute tablolarına doğrudan erişim yoktur. MaxCompute yürütücüleri uç noktalara veya Tunnel uç noktalarına bağlantıyı desteklemez ve yürütücü içinde PyODPS paketi bulunmaz. İşlev gövdesi içinden diğer MaxCompute tablolarına erişmek için ODPS giriş nesnelerini veya PyODPS DataFrame kullanamazsınız ve bu nesneleri dışarıdan içeri aktaramazsınız.
Küçük tablolar için: Tabloyu bir DataFrame kaynağı olarak aktarın.
Büyük tablolar için: Bunun yerine tablo birleşimi (join) kullanın.
Üçüncü taraf paketlerin kullanımı
Üçüncü taraf paketleri nasıl kullandığınız kodunuzun çalıştığı yere bağlıdır.
Kişisel bilgisayar veya on-premises sunucu. Gerekli Python sürümü için paketi pip veya paket yöneticiniz aracılığıyla yükleyin.
Notebook. Paket yükleme talimatları için platform sağlayıcınızla iletişime geçin.
DataWorks. DataWorks'te on-premises sisteme doğrudan paket yüklenmesi desteklenmez. Bunun yerine dosyayı okuyup exec komutunu çalıştırarak üçüncü taraf paketlere başvurun. Ayrıntılar için bkz. Üçüncü taraf pakete başvurmak için PyODPS düğümü kullanma.
DataStudio'da gösterilen dizin yapısı, dosya sistemindeki gerçek dizin yapısı değildir. DataStudio'da görüntülenen bir yolu içe aktarmak veya açmak başarısız olur.
DataWorks'te kaynakları yükledikten sonra kaynakların MaxCompute’e yüklendiğinden emin olmak için Submit seçeneğini tıklayın.
Özel bir NumPy sürümü kullanmak için kodunuzda
odps.df.supersede_libraries = Trueayarını yapın ve gerekli wheel paketini yüklerkenlibrariesparametresinin ilk girişi olarak NumPy paket adını belirtin.
Diğer MaxCompute tablolarındaki verilere erişim
Diğer MaxCompute tablolarına nasıl eriştiğiniz kodunuzun çalıştığı yere bağlıdır.
On-premises ortamı (kişisel bilgisayar, on-premises sunucu, Notebook veya DataWorks). Tabloya erişmek için on-premises kodu kullanın. Uç noktaya ulaşabiliyorsanız PyODPS veya PyODPS DataFrame kullanın. Uç noktaya ulaşamıyorsanız platform sağlayıcınızla iletişime geçin.
map, apply, map_reduce veya özel toplama işlevleri içinde. MaxCompute yürütücüleri uç nokta veya Tunnel uç noktası bağlantılarını desteklemez ve PyODPS paketi mevcut değildir. Diğer tablolara erişmek için ODPS giriş nesnelerini veya PyODPS DataFrame kullanamazsınız ve bu nesneleri dışarıdan içeri aktaramazsınız.
Küçük tablolar için: Tabloyu bir DataFrame kaynağı olarak aktarın.
Büyük tablolar için: Bunun yerine tablo birleşimi (join) kullanın.
pandas arka ucu davranışı
pandas arka ucunu kullandığınızda tüm kod on-premises ortamında çalışır. Gerekli tüm paketleri yerel olarak yükleyin.
pandas arka ucundan üretim ortamında MaxCompute’e geçiş yaptığınızda paket kurulumu için MaxCompute arka ucu kurallarına uyun.