Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj dekoratora @dp.update_flow , aby utworzyć przepływ aktualizacji. Aktualizuj przepływy zapisu w ujściach przy użyciu trybu aktualizacji danych wyjściowych, emitując tylko wiersze, które uległy zmianie w każdej partii. W przeciwieństwie do przepływów dołączania obsługują agregacje stanowe bez konieczności używania znaku wodnego.
Przepływy aktualizacji mogą kierować tylko ujścia. Tabele różnicowe nie są obsługiwane.
Przepływy aktualizacji mogą działać w trybie czasu rzeczywistego dla obciążeń operacyjnych w czasie poniżej sekundy. Tryb czasu rzeczywistego w potokach Lakeflow obsługuje obliczenia klasyczne i serwerowe.
Syntax
from pyspark import pipelines as dp
dp.create_sink("<sink-name>", "<format>", {"<key>": "<value>"})
@dp.update_flow(
target = "<sink-name>",
name = "<flow-name>", # optional, defaults to function name
depends_on = "<flow-name>", # optional, Public Preview
spark_conf = {"<key>" : "<value>", "<key>" : "<value>"}, # optional
comment = "<comment>") # optional
def <function-name>():
return (<streaming-query>)
Parameters
| Parameter | Typ | Description |
|---|---|---|
| funkcja | function |
Required. Funkcja, która zwraca strumieniowy DataFrame w Apache Spark na podstawie zapytania zdefiniowanego przez użytkownika. |
target |
str |
Required. Nazwa ujścia, do których jest zapisywany ten przepływ. |
name |
str |
Nazwa przepływu. Jeśli nie zostanie podana, wartość domyślna to nazwa funkcji. |
depends_on |
str lub list |
Publiczna wersja zapoznawcza. Jedna lub więcej nazw przepływów, które muszą zakończyć się pomyślnie, zanim ten przepływ się rozpocznie. Akceptuje pojedynczą nazwę przepływu lub listę nazw. W ciągłym potoku każdy poprzednik musi być jednorazowymonce () przepływem. To nakazuje tylko wykonywanie przepływu; nie zmienia sposobu działania przepływu. Zobacz Wykonywanie przepływu potoku zamówień z depends_on. |
comment |
str |
Opis przepływu. |
spark_conf |
dict |
Dykt konfiguracji platformy Spark na potrzeby wykonywania tego zapytania. Te konfiguracje zastępują konfiguracje ustawione dla miejsca docelowego, potoku lub klastra. |
Examples
Agregacja do ujścia platformy Kafka
Zapisz wyniki agregacji stanowej do ujścia platformy Kafka:
from pyspark import pipelines as dp
from pyspark.sql.functions import col
dp.create_sink("event_counts_sink", "kafka", {
"kafka.bootstrap.servers": broker_address,
"topic": output_topic,
})
@dp.update_flow(
name="event_counts_flow",
target="event_counts_sink",
)
def event_counts():
return (
spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", broker_address)
.option("subscribe", input_topic)
.load()
.selectExpr("CAST(key AS STRING) AS event_type")
.groupBy(col("event_type"))
.count()
)
Tryb czasu rzeczywistego
Note
Tryb czasu rzeczywistego wymaga potoku skonfigurowanego do ciągłego wykonywania. Zobacz Użyj trybu czasu rzeczywistego w potokach Lakeflow, aby sprawdzić wymagania wykonawcze i włączyć tryb czasu rzeczywistego przed uruchomieniem tego przykładu.
Użyj spark_conf polecenia , aby skonfigurować przepływ aktualizacji dla trybu czasu rzeczywistego:
from pyspark import pipelines as dp
dp.create_sink("my_kafka_sink", "kafka", {
"kafka.bootstrap.servers": broker_address,
"topic": output_topic,
})
@dp.update_flow(
name="my_rtm_flow",
target="my_kafka_sink",
spark_conf={
"pipelines.trigger": "RealTime",
"pipelines.trigger.interval": "5 minutes",
}
)
def my_real_time_flow():
return (
spark.readStream
.format("kafka")
.option("kafka.bootstrap.servers", broker_address)
.option("subscribe", input_topic)
.load()
)
Ograniczenia
- Ujścia tabeli delty nie są obsługiwane jako obiekty docelowe dla przepływów aktualizacji.