Tüm Ürünler
Search
Belge Merkezi

Realtime Compute for Apache Flink:Python

Son Güncelleme:Oct 04, 2026

Realtime Compute for Apache Flink, Flink SQL işlerinde Python kullanıcı tanımlı işlevleri (UDF) destekler. Python'da skaler, toplam ve tablo işlevleri oluşturabilir, Python bağımlılıklarını yönetebilir ve UDF performansını ayarlayabilirsiniz.

Kullanıcı tanımlı işlev türleri


Kategori


Açıklama


kullanıcı tanımlı skaler işlev (UDSF)


UDSF, sıfır, bir veya daha fazla skaler değeri yeni bir skaler değerle eşler. Tek bir giriş satırını işleyerek tek bir çıkış değeri üretir ve birebir eşleme sağlar. Daha fazla bilgi için bkz. Kullanıcı tanımlı skaler işlevler (UDSF).


kullanıcı tanımlı toplam işlevi (UDAF)


UDAF, birden çok kaydı tek bir kayıtta toplar ve çoktan bire eşleme oluşturur. Daha fazla bilgi için bkz. Kullanıcı tanımlı toplam işlevleri (UDAF).


kullanıcı tanımlı tablo işlevi (UDTF)


UDTF, giriş parametresi olarak sıfır, bir veya daha fazla skaler değeri kabul eder. Skaler işlevlerin aksine tablo işlevi, her biri bir veya daha fazla sütundan oluşan istenilen sayıda satır döndürebilir. Daha fazla bilgi için bkz. Kullanıcı tanımlı tablo işlevleri (UDTF).

Python bağımlılıklarını kullanma

Realtime Compute for Apache Flink kümeleri, Pandas, NumPy ve PyArrow gibi yaygın Python paketleri önceden yüklenmiş olarak gelir. Önceden yüklenen üçüncü taraf Python paketlerinin listesi için bkz. Python işlerini geliştirme. Aşağıdaki örnekte gösterildiği gibi, bu paketleri kullanmadan önce işlevinizde içe aktarın.

@udf(result_type=DataTypes.FLOAT())
def percentile(values: List[float], percentile: float):
    import numpy as np
    return np.percentile(values, percentile)

Önceden yüklenmemiş bir üçüncü taraf Python paketi kullanmak için Python UDF'yi kaydederken bu paketi bağımlılık dosyası olarak yükleyin. Daha fazla bilgi için bkz. Kullanıcı tanımlı işlevleri (UDF) yönetme ve Python bağımlılıklarını kullanma.

Kod hata ayıklama

Sorun giderme amacıyla Python kullanıcı tanımlı işlevinizden günlük bilgilerini çıktılamak için logging modülünü kullanabilirsiniz. Aşağıdaki örnekte logging'in nasıl kullanılacağı gösterilmektedir.

@udf(result_type=DataTypes.BIGINT())
def add(i, j):    
  logging.info("hello world")    
  return i + j

Günlükler oluşturulduktan sonra bunları TaskManager günlük dosyalarında görüntüleyebilirsiniz. Daha fazla bilgi için bkz. Çalıştırma günlüklerini görüntüleme.

Performans ayarlama

Kaynakların önceden yüklenmesi

eval yöntemine yapılan her çağrıda kaynakların yeniden yüklenmesini önlemek için işlev başlatma sırasında kaynakları önceden yükleyin. Örneğin, büyük bir derin öğrenme modelini bir kez yükleyip ardından bu modele karşı toplu iş tahminleri çalıştırabilirsiniz.

from pyflink.table import DataTypes
from pyflink.table.udf import ScalarFunction, udf

class Predict(ScalarFunction):
    def open(self, function_context):
        import pickle

        with open("resources.zip/resources/model.pkl", "rb") as f:
            self.model = pickle.load(f)

    def eval(self, x):
        return self.model.predict(x)

predict = udf(Predict(), result_type=DataTypes.DOUBLE(), func_type="pandas")
Not

Python veri dosyalarının nasıl yükleneceği hakkında bilgi için bkz. Python bağımlılıklarını kullanma.

Eşzamansız kullanıcı tanımlı işlevler

Harici veritabanlarına erişme veya HTTP hizmeti çağrıları yapma gibi G/Ç yoğun senaryolar için eşzamansız kullanıcı tanımlı işlevleri kullanın. Tek bir işlev örneği, birden çok isteği aynı anda işleyebilir; bekleme süresini birkaç çağrıya dağıtarak iş aktarım hızını önemli ölçüde artırır. Bu özellik yalnızca VVR 11.7 ve sonraki sürümlerde desteklenir ve yalnızca kullanıcı tanımlı skaler işlevler (UDSF) için geçerlidir. Ayrıntılar için bkz. Eşzamansız kullanıcı tanımlı işlevler.

Pandas kitaplığını kullanma

Standart Python kullanıcı tanımlı işlevlerine ek olarak Realtime Compute for Apache Flink, Pandas kullanıcı tanımlı işlevleri de destekler. Bu işlevler, pandas.Series ve pandas.DataFrame gibi Pandas veri yapılarını giriş olarak kabul eder; böylece Pandas ve NumPy gibi yüksek performanslı kitaplıklardan yararlanabilirsiniz. Daha fazla bilgi için bkz. Vektörleştirilmiş Kullanıcı Tanımlı İşlevler.

Parametreler

Bir Python kullanıcı tanımlı işlevinin performansı büyük ölçüde uygulamasına bağlıdır. Performans sorunlarıyla karşılaşırsanız önce işlev mantığını optimize edin. Aşağıdaki parametreler de performansı etkiler.

Parametre

Açıklama

python.fn-execution.bundle.size

Python UDF'ler eşzamansız olarak çalışır. Java operatörü, verileri yürütme için bir Python işlemine göndermeden önce önbelleğe alır. Önbellek bir eşik değerine ulaştığında veriler Python işlemine gönderilir. python.fn-execution.bundle.size parametresi, önbelleğe alınabilecek maksimum kayıt sayısını kontrol eder.

Varsayılan değer 100.000 kayıttır.

python.fn-execution.bundle.time

Bu parametre, maksimum önbelleğe alma süresini kontrol eder. Kayıt sayısı python.fn-execution.bundle.size eşiğine ulaştığında veya önbelleğe alma süresi python.fn-execution.bundle.time eşiğine ulaştığında önbelleğe alınan veriler işlenmek üzere gönderilir.

Varsayılan değer 1.000 milisaniyedir.

python.fn-execution.arrow.batch.size

Pandas UDF'ler için bu parametre, bir Arrow toplu işinin içerebileceği maksimum kayıt sayısını belirtir. Varsayılan değer 10.000'dir.

Not

python.fn-execution.arrow.batch.size parametresinin değeri, python.fn-execution.bundle.size parametresinin değerinden büyük olamaz.

Not

Bu parametreleri aşırı büyük değerlere ayarlamak ters etki yaratabilir. Bir kontrol noktası sırasında aşırı arabelleğe alma, kontrol noktalarının çok uzun sürmesine veya başarısız olmasına neden olabilir. Bu parametreler hakkında daha fazla bilgi için bkz. Yapılandırma.

İlgili konular