Python DataFrame API, Flink işleri yazmak için DataFrame tarzında bir Python arayüzü sağlar. Veri işleme mantığını ilişkisel cebir stilinde ifade etmenizi sağlayan filtreleme, projeksiyon, birleştirme ve toplama gibi temel API'ler sunar. Ayrıca DataFrame API, standart operatörlerin ifade edemediği iş mantığını kapsayacak şekilde Python'da kullanıcı tanımlı işlevler yazmanıza olanak tanır. Buna ek olarak, DataFrame API, sınıflandırma, duygu analizi, ayıklama, çeviri, özetleme ve gömme için hazır AI işlevleriyle doğrudan veri işlem hattınızda büyük dil modellerine bağlanan yapay zeka/büyük dil modeli (AI/LLM) yetenekleri sağlar. Bu konu, iş geliştirme için referans olarak desteklenen API'leri açıklar. Tam API belgeleri için bkz. PyFlink DataFrame.
DataFrame işlemleri
Aşağıdaki tabloda, DataFrame üzerindeki temel işlemler özetlenmiştir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
İfade yardımcı işlevleri
|
|
|
|
|
|
|
|
Veri türü
DataType , DataFrame sütun türlerini tanımlamak için kullanılır.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
DataType, bir veri kaynağının şemasını, bir UDF'nin çıkış türünü vb. belirtmek için kullanılabilir. Örneğin, bir Kafka kaynağının şemasını belirtmek için DataType'ı kullanın:
import pyflink.dataframe as pf
from pyflink.dataframe import DataType
df = pf.read_kafka(
"localhost:9092",
topic="user_events",
schema={
"user_id": DataType.string(),
"event_type": DataType.string(),
"amount": DataType.decimal(10, 2),
"tags": DataType.list(DataType.string()),
"event_time": DataType.timestamp_ltz(3),
},
format="json",
startup_mode="earliest-offset",
)
DataType.tensor, değişken şekilli tensörleri destekler. Bir UDF'de, değişken şekilli tensörler ile NumPy ndarrays arasında dönüşüm yapmak için yerleşik yöntemleri kullanabilirsiniz:
from pyflink.dataframe.tensor import variable_tensors_to_arrow
result_type = DataType.struct({
"id": DataType.int64(),
# No shape specified: a variable-length tensor
"tensor": DataType.tensor("float32"),
})
def transpose_batch_tensor(batch):
# Call to_numpy() to convert the variable-length tensor columns to object ndarrays.
# Each element is a standalone ndarray, and the shapes can differ.
tensors = batch["tensor"].to_numpy()
transposed = [
None if tensor is None else tensor.T
for tensor in tensors
]
return {
"id": batch["id"],
# Convert the variable-length ndarray columns back to Arrow variable-length tensor columns
"tensor": variable_tensors_to_arrow(
transposed,
dtype="float32",
),
}
Değişken şekilli tensörler VVR 11.9.preview.1 sürümünden itibaren desteklenmektedir.
G/Ç
DataFrame, yaygın veri kaynaklarını okumak ve yazmak için zengin bir G/Ç API kümesi sağlar. Veri okuma ve yazma işlemleri için diğer desteklenen connectors veya custom connectors ile çalışmak üzere read_generic veya write_generic fonksiyonlarını da kullanabilirsiniz.
Veri okuma
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Veri yazma
|
Sink |
API |
|
Parquet dosyası |
|
|
JSON dosyası |
|
|
Kafka |
|
|
MaxCompute (ODPS) |
|
|
Paimon |
|
|
SLS (Simple Log Service) |
|
|
Hologres |
|
|
Milvus |
|
|
Yazdırma |
VVR 11.9.preview.1 sürümünden itibaren desteklenir. |
|
Genel / özel bağlayıcılar |
Tek bir işin verileri birden çok kez yazması gerektiğinde, tüm yazma fonksiyonlarını birlikte çalıştırmak için create_statement_set kullanarak bir StatementSet oluşturun.
Catalog Kullanımı
DataFrame API, Catalog'ları kullanabilir ve Catalog tablolarından veri okuyup bu tablolara veri yazabilir.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Kullanıcı tanımlı fonksiyonlar
Kullanıcı tanımlı skaler fonksiyonlar udf
Kullanıcı tanımlı bir skaler fonksiyon, her girdi satırını tek bir sonuç değerine dönüştürür. Dört türden biri olabilir:
Senkron satır UDF: Bir seferde bir satırı işleyen normal bir Python fonksiyonu.
Asenkron satır UDF: Harici hizmetleri çağırma veya G/Ç yoğunluklu mantık için uygundur; aktarım hızını artırmak amacıyla birden çok satırın eş zamanlı olarak G/Ç işlemi yapmasına olanak tanır.
Senkron vektör UDF: Verileri toplu halde alır ve döndürür; Python ile Flink çalışma zamanı arasındaki satır başına ek yükü azaltır. Saf hesaplama işlemleri için uygundur.
Asenkron vektör UDF: Toplu iş aktarım hızını asenkron G/Ç eşzamanlılığı ile birleştirir.
Skaler fonksiyonları kaydetme
udf dekoratörü, bir Python fonksiyonunu DataFrames içinde kullanılmak üzere skaler bir fonksiyon olarak kaydeder.
-
API adı: udf.
udf( func=None, *, return_dtype=None, deterministic=True, name=None, func_type=None, concurrency=None, batch_size=None, num_gpus=None, gpu_type=None ) Açıklama: Bir Python fonksiyonunu DataFrame skaler UDF olarak kaydeder. Normal fonksiyonları, asenkron fonksiyonları, ScalarFunction / AsyncScalarFunction alt sınıflarını ve çağrılabilir sınıfları destekler.
-
Parametreler
Parametre adı
Parametre türü
Zorunlu
Açıklama
func
Callable / Sınıf
Hayır
Sarmalanacak Python fonksiyonu, ScalarFunction örneği/alt sınıfı veya çağrılabilir sınıf. Atlanırsa bir dekoratör döndürülür.
return_dtype
DataType / str / type
Hayır
Dönüş türü.DataTypeörneği (örneğin,DataType.int64()), Python türleri (örneğin,int) veya SQL türü dizeleri (örneğin,'BIGINT') olabilir. Atlanırsa, fonksiyon türü ipuçlarından otomatik olarak çıkarılır.
deterministic
Boolean
Hayır
Fonksiyonun deterministik olup olmadığı. Varsayılan:True.
name
Dize
Hayır
UDF adı. Varsayılan olarak fonksiyon adını alır.
func_type
Dize
Hayır
Çalıştırma formatı. Seçenekler:"general","pandas","arrow". Atlanırsa, fonksiyon türü ipuçlarından otomatik olarak algılanır.
concurrency
int
Hayır
UDF operatörünün paralellik değeri. Farklı eşzamanlılık değerlerine sahip UDF'ler ayrı operatörlere ayrılır.
batch_size
int
Hayır
Toplu iş başına maksimum öğe sayısı. Yalnızca toplu iş UDF'leri (pandas / arrow modu) için geçerlidir.
num_gpus
float
Hayır
UDF için istenecek GPU sayısı (örneğin, 0,5, 1). Ayarlandığında, UDF ayrı bir operatörde çalışır ve diğer UDF'lerle (diğer GPU UDF'leri dahil) zincirlenmez.
gpu_type
Dize
Hayır
GPU türü. num_gpus belirtildiğinde gereklidir. -
Dönüş değeri
with_column,with_columns,map,map_batchesve benzeri işlemlerde kullanılabilecek bir DataFrameUDFWrapper nesnesi.
Senkron satır UDF
**with_column veya with_columns içinde kullanım**
Bir skaler UDF, bir veya daha fazla sütun alır ve tek bir sütun döndürür. Dönüş türünü otomatik olarak çıkarmak için Python türü ipuçlarını kullanın veya açıkça belirtmek için return_dtype parametresini kullanın. Bir UDF tanımlarken, eşzamanlılığı ayarlamak için concurrency parametresini kullanabilirsiniz.
VVR 11.9.preview.1 sürümünden itibaren, çağrılabilir bir sınıf kullanarak bir UDF tanımlayabilirsiniz. UDF başlatma ve yürütme mantığını __init__ ve __call__ yöntemlerinde tanımlayın.
from pyflink.dataframe import col, udf
orders = pf.from_records(
[
(1001, 1, 99.9, "PAID"),
(1002, 2, 35.5, "CREATED"),
(1003, 1, 188.0, "PAID"),
(1004, 3, 88.8, None),
],
schema=["order_id", "user_id", "amount", "status"],
)
@udf
def normalize_status(status: str) -> str:
if status is None:
return "UNKNOWN"
return status.strip().upper()
@udf(concurrency=32)
def order_tag(amount: float, status: str) -> str:
"""Takes multiple columns as input"""
if status == "PAID" and amount is not None and amount >= 100:
return "high_value_paid"
return "normal"
@udf
class ModelPredictor:
def __init__(self):
# Initialization is executed on the task manager
self._model = load_model()
def __call__(self, amount: float) -> str:
return self._model.predict(amount)
# with_column adds a single column
orders_with_status = orders.with_column(
"status_norm", normalize_status(col("status"))
)
# with_columns adds multiple columns at once
orders_with_flags = orders.with_columns(
status_norm=normalize_status(col("status")),
tag=order_tag(col("amount"), col("status")),
)
# Use stateful UDFs
orders_with_predictions = orders.with_column(
"prediction", ModelPredictor(col("amount"))
)
**map içinde kullanım**
map tam bir satır alır ve yeni bir satır döndürür. Girdi sütunlarına fonksiyon içinde ada göre erişilir. Dönüş türü, açıkça bildirmek için DataType.struct ile veya otomatik çıkarım için TypedDict dönüş türü ipuçları aracılığıyla bildirilebilir. udf dekoratörünü kullanmadan doğrudan map işlevine bir Python fonksiyonu geçirebilirsiniz.
Açıkça bildirmek için return_dtype kullanımı
def build_order_feature(row):
amount = row["amount"] or 0.0
return {
"order_id": row["order_id"],
"user_id": row["user_id"],
"feature": f"{row['status']}:{'large' if amount >= 100 else 'normal'}",
}
order_features = orders.map(
build_order_feature,
return_dtype=DataType.struct({
"order_id": DataType.int64(),
"user_id": DataType.int64(),
"feature": DataType.string(),
}),
)
Otomatik algılama için TypedDict kullanımı
from typing import TypedDict
class OrderFeature(TypedDict):
order_id: int
user_id: int
feature: str
def build_order_feature_typed(row) -> OrderFeature:
amount = row["amount"] or 0.0
return {
"order_id": row["order_id"],
"user_id": row["user_id"],
"feature": f"{row['status']}:{'large' if amount >= 100 else 'normal'}",
}
order_features_typed = orders.map(build_order_feature_typed)
Senkron vektör UDF
**with_column veya with_columns içinde kullanım**
Vektörize UDF'ler, verileri toplu halde alır ve döndürerek Python ile Flink çalışma zamanı arasındaki satır başına ek yükü azaltır. Saf hesaplama işlemleri için uygundur. Pandas (pandas.Series) ve Arrow (pyarrow.Array) formatlarını destekler. UDF mantığınıza göre seçim yapın. Toplu iş boyutunu kontrol etmek için batch_size parametresini kullanın. UDF tarafından döndürülen satır sayısı, girdi satır sayısına eşit olmalıdır.
Pandas formatı
import pandas as pd
@udf(return_dtype=DataType.float64(), concurrency=32, batch_size=64)
def scale_amount_pandas(amounts: pd.Series) -> pd.Series:
return amounts * 100.0
orders_scaled_pandas = orders.with_column(
"amount_scaled", scale_amount_pandas(col("amount")),
)
Arrow formatı
import pyarrow as pa
import pyarrow.compute as pc
@udf(return_dtype=DataType.float64(), concurrency=32, batch_size=64)
def scale_amount_arrow(amounts: pa.Array) -> pa.Array:
return pc.multiply(amounts, 100.0)
orders_scaled_arrow = orders.with_column(
"amount_scaled", scale_amount_arrow(col("amount")),
)
**map_batches içinde kullanım**
map_batches tüm satırlar üzerinde vektörize işlem gerçekleştirir. batch_format="pandas" olduğunda, fonksiyon girdisi ve çıktısı dict[str, pandas.Series] türündedir. batch_format="arrow" olduğunda, girdi ve çıktı dict[str, pyarrow.Array] türündedir. udf dekoratörüyle sarmalamadan doğrudan map_batches işlevine bir Python fonksiyonu geçirebilirsiniz.
Pandas formatı
def score_batch_pandas(batch: dict[str, pd.Series]) -> dict[str, pd.Series]:
amount = batch["amount"].fillna(0.0)
return {
"order_id": batch["order_id"],
"score": (amount / 100.0).clip(0.0, 1.0),
}
order_scores_pandas = orders.map_batches(
score_batch_pandas,
batch_format="pandas",
batch_size=1024,
return_dtype=DataType.struct(
{
"order_id": DataType.int64(),
"score": DataType.float64(),
}
),
)
Arrow formatı
def score_batch_arrow(batch: dict[str, pa.Array]) -> dict[str, pa.Array]:
amount = pc.if_else(pc.is_null(batch["amount"]), 0.0, batch["amount"])
raw_score = pc.divide(pc.cast(amount, pa.float64()), 100.0)
score = pc.if_else(
pc.less(raw_score, 0.0),
0.0,
pc.if_else(pc.greater(raw_score, 1.0), 1.0, raw_score),
)
return {
"order_id": batch["order_id"],
"score": score,
}
order_scores_arrow = orders.map_batches(
score_batch_arrow,
batch_format="arrow",
batch_size=1024,
return_dtype=DataType.struct(
{
"order_id": DataType.int64(),
"score": DataType.float64(),
}
),
)
Asenkron satır UDF
Asenkron UDF'ler, birden çok satırın G/Ç işlemlerini eş zamanlı olarak gerçekleştirmesine olanak tanıyarak aktarım hızını artırır. Harici hizmetleri çağıran veya G/Ç yoğunluklu mantık içeren işlemler için uygundur. Asenkron satır tabanlı UDF'leri with_column, with_columns veya map içinde çağırabilirsiniz.
import asyncio
# Use in `with_column`
@udf(concurrency=32)
async def query_region(user_id: int) -> str:
await asyncio.sleep(0.01) # simulate async I/O
return f"region_for_{user_id}"
orders_with_region = orders.with_column(
"region", query_region(col("user_id")),
)
# Use in `map`
class OrderWithRegion(TypedDict):
order_id: int
region: str
async def enrich_order_region(row) -> OrderWithRegion:
await asyncio.sleep(0.01) # Mock async I/O
return {
"order_id": row["order_id"],
"region": f"region_for_{row['user_id']}",
}
orders_with_region = orders.map(enrich_order_region)
Asenkron vektör UDF
Asenkron vektörize UDF'ler, toplu işleme aktarım hızını asenkron G/Ç eşzamanlılığı ile birleştirir. Her bir toplu işin boyutunu kontrol etmek için batch_size parametresini kullanın. Asenkron vektörize UDF'leri with_column, with_columns veya map_batches içinde çağırabilirsiniz.
# Use in `with_column`
@udf(return_dtype=DataType.string(), concurrency=32, batch_size=64)
async def batch_enrich(statuses: pd.Series) -> pd.Series:
async def enrich_one(s):
await asyncio.sleep(0.01) # simulate async API call
return f"enriched_{s}"
tasks = [enrich_one(s) for s in statuses]
results = await asyncio.gather(*tasks)
return pd.Series(results)
orders_enriched = orders.with_column(
"status_enriched", batch_enrich(col("status")),
)
# Use in `map_batches`
async def enrich_order_batch(
batch: dict[str, pd.Series],
) -> dict[str, pd.Series]:
async def query_region(user_id):
await asyncio.sleep(0.01) # Simulate asynchronous I/O
return f"region_for_{user_id}"
regions = await asyncio.gather(
*(query_region(user_id) for user_id in batch["user_id"])
)
return {
"order_id": batch["order_id"],
"region": pd.Series(
regions,
index=batch["user_id"].index,
),
}
orders_with_region = orders.map_batches(
enrich_order_batch,
batch_format="pandas",
batch_size=64,
concurrency=32,
return_dtype=DataType.struct({
"order_id": DataType.int64(),
"region": DataType.string(),
}),
)
map ve map_batches içinde asenkron UDF'lerin çağrılması VVR 11.9.preview.1 sürümünden itibaren desteklenir.
Kullanıcı tanımlı tablo fonksiyonları udtf
Kullanıcı tanımlı bir tablo fonksiyonu, tek bir girdi satırını herhangi bir sayıda çıktı satırına genişletir ve her çıktı satırı bir veya daha fazla sonuç sütunu içerebilir.
Tablo fonksiyonlarını kaydetme
udtf dekoratörü, bir Python fonksiyonunu DataFrames içinde kullanılmak üzere tablo fonksiyonu olarak kaydeder.
-
API adı: udtf.
udtf( func=None, *, return_dtype=None, deterministic=True, name=None, concurrency=None, num_gpus=None, gpu_type=None ) Açıklama: Bir Python fonksiyonunu,
TableFunctionalt sınıfını/örneğini veya çağrılabilir bir sınıfı, DataFrames içinde kullanılmak üzere tablo fonksiyonu olarak kaydeder.-
Parametreler
Parametre adı
Parametre türü
Zorunlu
Açıklama
func
Callable / Sınıf
Hayır
Sarmalanacak Python fonksiyonu, TableFunction örneği/alt sınıfı veya çağrılabilir sınıf. Atlanırsa bir dekoratör döndürülür.
return_dtype
DataType / str / type
Hayır
Her çıktı satırının türü. Çok sütunlu çıktılar içinDataType.struct({...})veyaTypedDictkullanın.
deterministic
Boolean
Hayır
Fonksiyonun deterministik olup olmadığı. Varsayılan:True.
name
Dize
Hayır
UDTF adı. Varsayılan olarak fonksiyon adını alır.
concurrency
int
Hayır
UDTF operatörünün paralellik değeri.
num_gpus
float
Hayır
UDTF için istenecek GPU sayısı (örneğin, 0,5, 1). Ayarlandığında, UDTF ayrı bir operatörde çalışır ve diğer UDF'lerle (diğer GPU UDF'leri dahil) zincirlenmez.
gpu_type
Dize
Hayır
GPU türü. num_gpus belirtildiğinde gereklidir. -
Dönüş değeri
flat_mapveyajoin_lateraliçinde kullanılabilecek bir DataFrameUDTFWrapper nesnesi.
In join_lateral Used in
join_lateral appends UDTF results after the original input row. By default, input rows that produce no UDTF output are removed; you can set ignore_empty=False to keep input rows with no UDTF output.
from typing import Iterator, Tuple
from pyflink.dataframe import udtf
# Use type hint and .alias() to specify return types and column names
@udtf
def split_words(text: str) -> Iterator[Tuple[str, int]]:
for word in text.split():
yield word, len(word)
words_with_source = texts.join_lateral(
split_words(col("text")).alias("word", "word_length"),
ignore_empty=False,
)
# Or use return_dtype
@udtf(return_dtype=DataType.struct({
"word": DataType.string(),
"word_length": DataType.int32(),
}))
def split_words_with_length(text):
for word in text.split():
yield {"word": word, "word_length": len(word)}
words_with_detail = texts.join_lateral(
split_words_with_length(col("text")),
)
In flat_map Used in
flat_map calls the UDTF on each row. The result contains only the UDTF output columns, and the original input columns are not preserved. You can pass a Python function directly to flat_map without wrapping it with the udtf decorator.
from typing import Any, Dict, Iterator, TypedDict
# Use type hint with TypedDict to specify return types and column names
class Word(TypedDict):
word: str
length: int
def split_row(row: Dict[str, Any]) -> Iterator[Word]:
for word in row["text"].split():
yield {"word": word, "length": len(word)}
words = texts.flat_map(split_row)
# Or use return_dtype
def split_row_with_dtype(row):
for word in row["text"].split():
yield {"word": word}
words_with_dtype = texts.flat_map(
split_row_with_dtype,
return_dtype=DataType.struct({"word": DataType.string()}),
)
AI / LLM functions
DataFrame provides a set of built-in AI functions through the df.llm accessor. For the detailed API reference, see AI/LLM.
Provider configuration
Before using AI functions, register a model provider first.
|
|
|
|
|
|
|
|
|
|
|
Supported provider types:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
set_model_provider
-
API name: set_model_provider.
set_model_provider( name_or_provider, provider=None, **options ) Description: Registers a global Model Provider configuration. Three calling patterns are supported: pass a
ModelProviderinstance; pass a name plus aModelProviderinstance; or pass a name plus keyword arguments. Registered names must be unique. Registering a provider with an existing name raisesValueError.-
Parameters
Parameter name
Parameter type
Required
Description
name_or_provider
ModelProvider / String
Yes
AModelProviderinstance, which is registered automatically under its provider identifier, or a custom name string.
provider
ModelProvider
No
AModelProviderinstance. Used only when the first argument is a name string.
**options
key=value
No
Provider configuration items. Used only when the first argument is a name string and no provider is passed. When the first argument isopenai-compat,dashscope, ortriton, the corresponding provider is created. Otherwise, aGenericProvideris created. -
Return value
None.
-
Example
# Option 1: pass a ModelProvider instance directly pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) # Option 2: custom name + ModelProvider instance (register multiple) pf.set_model_provider("chat", pf.OpenAICompatProvider(task="chat/completions")) pf.set_model_provider("embedding", pf.OpenAICompatProvider(task="embeddings")) # Option 3: name + keyword arguments pf.set_model_provider("dashscope", task="chat/completions")
Generic invocation
-
API name: predict.
DataFrame.llm.predict( *input_cols, provider=None, model=None, output_type=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Performs generic model inference. Sends the specified input columns to the model and appends the model output columns to the DataFrame.
-
Parameters
Parameter name
Parameter type
Required
Description
*input_cols
String
Yes
The names of the columns used as model input. You can pass multiple columns.
provider
String
No
The provider name. If not specified, the default provider is used, or the only registered provider if just one is registered.
model
String
No
The model name, for example,"qwen3.6-plus".
output_type
String / DataType
No
The output type. By default,output STRINGis appended. If you pass a SQL type string or a non-structDataType, a single column namedoutputis appended. If you passDataType.struct({...}), custom columns are appended.
cache_table
String
No
The name of the Fluss table used to cache prediction results.
cache_key
String / List[String]
No
The cache key columns. When you set this parameter, you must also setcache_table.
config
Dict
No
The runtime configuration options.
**kwargs
key=value
No
Overrides model provider parameters for this call. For example, when usingOpenAICompatProviderorDashScopeProvider, you can passcontent_type,system_prompt,user_prompt,temperature, and so on. -
Return value
A DataFrame with the model output appended, in the
outputcolumn by default. -
Example
Text invocation
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) questions = pf.from_dict({ "id": [1, 2], "question": ["What is Flink?", "What is stream processing?"], }) # default output column: output (STRING) df = questions.llm.predict("question", model="qwen3.6-plus") # custom output column: answer (STRING) df = questions.llm.predict( "question", model="qwen3.6-plus", output_type=pf.DataType.struct({ "answer": pf.DataType.string() }))Multimodal invocation
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) tickets = pf.from_dict({ "question": ["Is this item damaged?"], "image_url": ["https://example.com/images/order-1001.jpg"], }) # multimodal input columns: one text column and one image column df = tickets.llm.predict( "question", "image_url", model="qwen3.6-plus", content_type=["TEXT", "IMAGE_URL"], )Result caching
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = questions.llm.predict( "question", model="qwen3.6-plus", cache_table="`fluss-catalog`.default_database.predict_cache", cache_key=["id", "question"])NotOnly Flink AI Service (built-in models) supports multimodal invocation and result caching.
Text
Text classification
-
API name: ai_classify.
DataFrame.llm.ai_classify( input_col, labels, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Classifies text into one of the specified labels.
-
Parameters
Parameter name
Parameter type
Required
Description
input_col
String / Expression
Yes
The input text column name or a column expression.
labels
List[String]
Yes
A list of classification labels, for example,["positive", "negative", "neutral"].See the descriptions of other parameters at Generic invocation.
NotDomain-specific AI functions such as
ai_classifyuse a built-in system prompt. The system prompt configured on the Model Provider does not take effect. -
Return value
A DataFrame with the
category(STRING) andconfidence(DOUBLE) columns appended, which contain the classification result and the confidence score. -
Example
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = pf.from_dict({"review": ["Great product", "Terrible, do not buy", "It is okay"]}) df = df.llm.ai_classify("review", labels=["positive", "negative", "neutral"], model="qwen3.6-plus")
Sentiment analysis
-
API name: ai_sentiment.
DataFrame.llm.ai_sentiment( input_col, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Performs sentiment analysis on the input text.
-
Parameters
Parameter name
Parameter type
Required
Description
input_col
String / Expression
Yes
The input text column name or a column expression.See the descriptions of other parameters at Generic invocation.
-
Return value
A DataFrame with the following columns appended, which contain the sentiment analysis result:
score(DOUBLE): The sentiment analysis score, ranging from -1.0 to 1.0.label(STRING): One of "positive", "negative", or "neutral".confidence(DOUBLE): Confidence score.
-
Example
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = pf.from_dict({"comment": ["This feature is amazing!", "Broke after one month"]}) df = df.llm.ai_sentiment("comment", model="qwen3.6-plus")
Information extraction
-
API name: ai_extract.
DataFrame.llm.ai_extract( input_col, schema, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Extracts structured information from text based on a given JSON Schema.
-
Parameters
Parameter name
Parameter type
Required
Description
input_col
String / Expression
Yes
The input text column name or a column expression.
schema
String
Yes
A JSON Schema string that describes the fields to extract, for example,'{"name":"STRING", "phone":"STRING"}'.See the descriptions of other parameters at Generic invocation.
-
Return value
A DataFrame with the
extracted_json(STRING) column appended, which contains the extracted structured information. -
Example
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = pf.from_dict({"text": ["John Smith, male, 28 years old, phone ***-****"]}) schema = '{"name": "STRING", "age": "INTEGER", "phone": "STRING"}' df = df.llm.ai_extract("text", schema=schema, model="qwen3.6-plus")
Text translation
-
API name: ai_translate.
DataFrame.llm.ai_translate( input_col, source_lang, target_lang, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Translates text from a source language to a target language.
-
Parameters
Parameter name
Parameter type
Required
Description
input_col
String / Expression
Yes
The input text column name or a column expression.
source_lang
String
Yes
Source language code, for example:"zh","en","auto"(auto-detected). Supported:auto,zh,en,ja,ko,fr,de,es,ru,ar,pt.
target_lang
String
Yes
The target language code. This value cannot be"auto".See the descriptions of other parameters at Generic invocation.
-
Return value
A DataFrame with the
translated_text(STRING) anddetected_language(STRING) columns appended, which contain the translated text and the detected language. -
Example
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = pf.from_dict({"text": ["Hello World", "How are you?"]}) df = df.llm.ai_translate("text", source_lang="en", target_lang="zh", model="qwen3.6-plus")
Text summarization
-
API name: ai_summarize.
DataFrame.llm.ai_summarize( input_col, max_length, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Summarizes text to a specified maximum length.
-
Parameters
Parameter name
Parameter type
Required
Description
input_col
String / Expression
Yes
The input text column name or a column expression.
max_length
int
Yes
Maximum number of characters in the summary. Must be greater than 0.See the descriptions of other parameters at Generic invocation.
-
Return value
A DataFrame with the
summary(STRING) column appended, which contains the summary text. -
Example
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = pf.from_dict({"article": ["This is a long article with lots of content..."]}) df = df.llm.ai_summarize("article", max_length=100, model="qwen3.6-plus")
Data masking
-
API name: ai_mask.
DataFrame.llm.ai_mask( input_col, entities, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Description: Masks sensitive information in text.
-
Parameters
Parameter name
Parameter type
Required
Description
input_col
String / Expression
Yes
The input text column name or a column expression.
entities
List[String]
Yes
A list of entity types to mask, for example,["name", "phone"].See the descriptions of other parameters at Generic invocation.
-
Return value
A DataFrame with the
masked_text(STRING) anddetected_entities(ARRAY<STRING>) columns appended, which contain the masked text and the detected entities. -
Example
pf.set_model_provider(pf.OpenAICompatProvider(task="chat/completions")) df = pf.from_dict({"text": ["Please contact John Smith at 555-0123"]}) df = df.llm.ai_mask("text", entities=["name", "phone"], model="qwen3.6-plus")
Vektör
Vektör araması
vector_searchyöntemi VVR 11.8 ve sonraki sürümlerde desteklenir.Bu konuda açıklanan
output_columnssonuç sütunu projeksiyonu ve eşleme tabanlı takma ad özellikleri VVR 11.9 ve sonraki sürümlerde desteklenir.VVR 11.8'de
output_columnsyalnızca tüm çıktı sütunlarını yeniden adlandırır: toplu işlem olmayan modda vektör tablosunun sütun sayısı artıscorekadar isim sağlamanız, toplu işlem modunda ise dış dizi sütunu için bir isim belirtmeniz gerekir. VVR 11.9 veya sonraki bir sürüme yükselttikten sonra bu parametreyi bu konuda açıklanan projeksiyon anlamına göre ayarlayın.
-
API adı: vector_search.
DataFrame.llm.vector_search( search_source, column_to_search, column_to_query, top_k, *, agg=False, output_columns=None, config=None, ignore_empty=False ) Açıklama: Mevcut DataFrame'deki sorgu vektörlerini kullanarak vektör arama kaynağında en benzer kayıtları arar ve arama sonuçlarını mevcut DataFrame'e ekler.
-
Parametreler
Parametre adı
Parametre türü
Zorunlu
Açıklama
search_source
DataFrame
Evet
Vektör arama kaynağı DataFrame'i; örneğin,read_milvuskullanılarak okunan bir vektör koleksiyonu.
column_to_search
Dize
Evet
Arama kaynağındaki vektör sütununun adı.
column_to_query
Dize / İfade
Evet
Mevcut DataFrame'deki sorgu vektörü sütun adı veya sütun ifadesi.
top_k
int
Evet
Giriş başına döndürülen en benzer kayıt sayısı.
agg
Boolean
Hayır
En iyi K sonucun tek bir dizi sütununda toplanıp toplanmayacağını belirtir. Varsayılan değer:False.
output_columns
List[Dize] / Eşleme[Dize, Dize]
Hayır
Döndürülecek vektör arama sonucu sütunları. Bir liste sütunları seçer ve orijinal adlarını korur.agg=Falseiken ayrıca anahtarların sütunları seçtiği ve değerlerin çıktı takma adları olduğu bir eşleme kullanabilirsiniz.search_sourceüst düzey sütunlarını ve motor tarafından oluşturulanscoresütununu seçebilirsiniz. Varsayılan değer:None(tüm sonuç sütunlarını seçer).
config
Sözlük
Hayır
Çalışma zamanı vektör arama yapılandırması.
ignore_empty
Boolean
Hayır
Arama sonucu bulunmayan giriş satırlarının atılıp atılmayacağını belirtir. Varsayılan değer:False. -
Dönüş değeri
Orijinal sütunları ve eklenen vektör arama sonucu sütunlarını içeren bir DataFrame nesnesi.
output_columnstoplamda M sonuç sütunu seçiyorsa:output_columnsbelirtmezseniz,search_sourceiçindeki tüm sütunlar veDOUBLEtüründe bir arama puanı sütunu döndürülür. Puan sütunu varsayılan olarakscoreolarak adlandırılır. Puanın anlamı ve sıralama yönü bağlayıcıya ve uzaklık metriğine bağlıdır. Milvus için değerisearch_metricile birlikte değerlendirin.agg=Falseolduğunda her giriş satırı en fazlatop_kadet çıktı satırı üretir ve M sütun eklenir. Bir liste sütunları bildirilen sırayla seçer ve orijinal adlarını korur. Bir eşleme ise anahtarlarının bildirim sırasına göre sütunları seçer ve karşılık gelen değerleri çıktı takma adları olarak kullanır.agg=Trueolduğunda arama sonucu bulunan her giriş en fazla bir çıktı satırı üretir vesearch_resultsadlıARRAY<ROW<...>>türünde bir sütun eklenir. Varsayılan olarakignore_empty=Falsetüm giriş kayıtlarını korur ve bir girdinin arama sonucu yoksasearch_resultsdeğeriNULLolur.ignore_empty=Trueayarlarsanız arama sonucu olmayan girdiler sonuçta yer almaz. Her dizi öğesi, seçilen M alanı içeren bir ROW yapısıdır. Bu mod yalnızca iç alanları projekte etmek için bir listeyi destekler, eşlemeyi desteklemez. Çağrıdan sonra dış dizi sütununu yeniden adlandırmak içinrename_columns("search_results", "new_name")çağrısını kullanın.output_columnsboş olamaz; sütun adları veya takma adlar da boş bırakılamaz veya yinelenemez. Seçilen sütunlarsearch_sourceüst düzey sütunları veya oluşturulan benzerlik sütunu olmalıdır. Dönüş sırası listenin veya eşleme anahtarlarının bildirim sırasına uyar.search_sourcezatenscoreveyascore0gibi sütunlara sahipse motor oluşturulan benzerlik sütunu içinscore2gibi benzersiz bir ad seçer. Bu durumdaoutput_columnsiçinde gerçek sütun adını kullanın.Toplu işlem olmayan modda sonuç sütunlarına çakışmayan takma adlar vermek için eşleme kullanabilirsiniz. Bir liste veya varsayılan çıktı mevcut DataFrame'in sütunlarıyla çakışıyorsa
vector_searchçağrısından önce çakışan sütunlarırename_columnsile yeniden adlandırın. Toplu işlem modunda mevcut DataFrame'de zaten birsearch_resultssütunu varsa önce bu sütunu yeniden adlandırın.Vektör arama kaynağının bağlayıcısı sütun budama itme desteğine sahipse motor
output_columnsbudağını bağlayıcıya iter. İtme desteği olup olmadığından bağımsız olarak nihai sonuç yalnızca seçilen vektör arama sonucu sütunlarını içerir.
-
VVR 11.8'den yükseltme notları
VVR 11.8'de
output_columnstüm çıktı sütunlarının takma adını ifade eder. VVR 11.9 ve sonraki sürümlerde ise seçilecek sonuç sütunlarını ifade eder. Örneğin, VVR 11.8 için yazılan aşağıdaki çağrı:output_columns=["match_doc_id", "match_embedding", "match_title", "match_score"]Yükseltmeden sonra bunun yerine bir eşleme kullanın:
output_columns={ "doc_id": "match_doc_id", "embedding": "match_embedding", "title": "match_title", "score": "match_score", } -
Örnekler
from array import array import pyflink.dataframe as pf from pyflink.dataframe import DataType query_df = pf.from_dict({ "query_id": [1], "query_embedding": [array("f", [0.1, 0.2, 0.3])], }) documents = pf.read_milvus( endpoint="http://milvus.example.com", username="${secret_values.milvus_user}", password="${secret_values.milvus_password}", database_name="commerce", collection_name="support_docs", schema={ "doc_id": DataType.int64(), "embedding": DataType.list(DataType.float32()), "title": DataType.string(), }, search_metric="COSINE", ) selected_docs = query_df.llm.vector_search( documents, column_to_search="embedding", column_to_query="query_embedding", top_k=3, output_columns=["doc_id", "title", "score"], )Bir liste sonuç sütunlarını projekte eder ve orijinal adlarını korur. Aynı anda takma ad belirtmek için bir eşleme kullanın:
matched_docs = query_df.llm.vector_search( documents, column_to_search="embedding", column_to_query="query_embedding", top_k=3, output_columns={ "doc_id": "match_doc_id", "title": "match_title", "score": "match_score", }, )Toplu işlem modunda bir liste her dizi öğesinin alanlarını seçer ve dış dizi sütunu her zaman
search_resultsolarak adlandırılır. Dış dizi sütununu yeniden adlandırmak içinrename_columnsçağrısını kullanın:matched_docs_agg = query_df.llm.vector_search( documents, column_to_search="embedding", column_to_query="query_embedding", top_k=3, agg=True, output_columns=["doc_id", "title", "score"], ).rename_columns("search_results", "matches")
Metin gömme
-
API adı: ai_embed.
DataFrame.llm.ai_embed( input_col, dimension=1024, *, provider=None, model=None, cache_table=None, cache_key=None, config=None, **kwargs ) Açıklama: Metin için vektör gömmeleri oluşturur.
-
Parametreler
Parametre adı
Parametre türü
Zorunlu
Açıklama
input_col
Dize / İfade
Evet
Giriş metni sütun adı veya bir sütun ifadesi.
dimension
int
Hayır
Vektör boyutu. Varsayılan değer: 1024.Diğer parametrelerin açıklamaları için bkz. Genel çağrı.
-
Dönüş değeri
Oluşturulan vektörü içeren
embedding(ARRAY<FLOAT>) sütunu eklenmiş bir DataFrame. -
Örnek
pf.set_model_provider("embedding", pf.OpenAICompatProvider(task="embeddings")) df = pf.from_dict({"text": ["stream processing with Flink", "real-time analytics"]}) df = df.llm.ai_embed("text", dimension=1024, provider="embedding", model="text-embedding-v4")
Çok modlu işleçler
DataFrame API'si, görüntüler, ses ve video gibi çok modlu verileri okumak, işlemek ve analiz etmek için çok modlu işleçleri çağırmanıza olanak tanır. Daha fazla bilgi için bkz. Çok Modlu İşleçler. API belgelendirmesi için bkz. Çok Modlu İfadeler.
Ortam ve yapılandırma
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Çalışma zamanı parametrelerini değiştirin
-
API adı: DataFrameConfig.set.
DataFrameConfig.set( key, value ) Açıklama: Bir DataFrame API işinin çalışma zamanı parametrelerini değiştirir. Aşağıdaki örnekte gösterildiği gibi Python iş parametrelerini ve Table API parametrelerini yapılandırabilirsiniz. Yapılandırılan parametreler varsayılan
TableEnvironmentiçin geçerli olur ve işin Runtime parameter configuration bölümündeki aynı ada sahip parametreleri geçersiz kılar.-
Parametreler
Parametre adı
Parametre türü
Zorunlu
Açıklama
key
Dize
Evet
Parametre adı.
value
Dize
Evet
Parametre değeri. -
Dönüş değeri
Yöntem zincirlemeyi destekleyen DataFrameConfig nesnesinin kendisi.
-
Örnek
import pyflink.dataframe as pf pf.config.set("python.fn-execution.arrow.batch.size", "256") pf.config.set("table.exec.async-scalar.max-concurrent-operations", "10") pf.config.set("table.exec.async-lookup.timeout", "1 min")NotBeklenen şekilde etkili olmaları için parametreleri iş mantığını tanımlamadan önce yapılandırın.