Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa pagina fornisce informazioni di riferimento per la modalità in tempo reale in Structured Streaming, inclusi ambienti supportati, linguaggi, origini, sink, operatori e limitazioni note.
Ambienti, lingue e modalità supportati
Lingue supportate: La modalità in tempo reale supporta Scala, Java e Python.
Tipi di calcolo supportati:
| Tipo di ambiente di calcolo | Supportato |
|---|---|
| Dedicato (in precedenza: utente singolo) | ✓ |
| Standard (in precedenza: condiviso) | ✓ (solo Python) |
| Pipeline dichiarative di Lakeflow Spark classiche | Non supportato |
| Pipeline dichiarative di Lakeflow Spark serverless | Non supportato |
| Serverless | Non supportato |
Modalità di esecuzione supportate:
| Modalità di esecuzione | Supportato |
|---|---|
| Modalità di aggiornamento | ✓ |
| Append mode | Non supportato |
| Modalità completa | Non supportato |
Supporto di sorgente e ricevitore
| Origine o destinazione | Come origine | Come destinazione |
|---|---|---|
| Apache Kafka | ✓ | ✓ |
| Hub eventi (con il connettore Kafka) | ✓ | ✓ |
| Kinesis | ✓ (solo modalità EFO) | Non supportato |
| AWS MSK | ✓ | Non supportato |
| Delta | Non supportato | Non supportato |
| Google Pub/Sub | Non supportato | Non supportato |
| Apache Pulsar | Non supportato | Non supportato |
Sink arbitrari (con forEachWriter) |
Non applicabile | ✓ |
Operatori supportati
| Operatori | Supportato |
|---|---|
| Operazioni senza stato | |
| Selection | ✓ |
| Proiezione | ✓ |
| funzioni definite dall'utente | |
| Scala UDF (Funzioni definite dall'utente in Scala) | ✓ (con alcune limitazioni) |
| Python UDF | ✓ (con alcune limitazioni) |
| Aggregazione | |
| sum | ✓ |
| count | ✓ |
| max | ✓ |
| min | ✓ |
| avg | ✓ |
| Funzioni di aggregazione | ✓ |
| Windowing | |
| Rotolamento | ✓ |
| Scorrevole | ✓ |
| Sessione | Non supportato |
| Deduplicazione | |
| dropDuplicates | ✓ (lo stato è illimitato) |
| dropDuplicatesWithinWatermark (elimina duplicati all'interno del watermark) | Non supportato |
| Stream - Unione di tabelle | |
| Tabella broadcast (deve essere piccola) | ✓ |
| Stream - Unione di Stream | Non supportato |
| (flat)MapGroupsWithState | Non supportato |
| transformWithState | ✓ (con alcune differenze) |
| union | ✓ (con alcune limitazioni) |
| forEach | ✓ |
| forEachBatch | Non supportato |
| mapPartitions | Non supportato (vedere la limitazione) |
Considerazioni speciali
Alcuni operatori e funzionalità hanno considerazioni o differenze specifiche quando vengono usati in modalità in tempo reale.
transformWithState in modalità tempo reale
Per la compilazione di applicazioni con stato personalizzate, Databricks supporta transformWithState, un'API in Apache Spark Structured Streaming. Per altre informazioni sull'API e sui frammenti di codice, vedere Creare un'applicazione con stato personalizzata .
Esistono tuttavia alcune differenze tra il comportamento dell'API in modalità in tempo reale e le query di streaming tradizionali che sfruttano l'architettura micro-batch.
- La modalità in tempo reale chiama il
handleInputRows(key: String, inputRows: Iterator[T], timerValues: TimerValues)metodo per ogni riga.- L'iteratore
inputRowsrestituisce un singolo valore. La modalità micro batch lo chiama una volta per ogni chiave e l'iteratoreinputRowsrestituisce tutti i valori per una chiave nel micro batch. - Tenere conto di questa differenza durante la scrittura del codice
- L'iteratore
- I timer dell'ora dell'evento non sono supportati in modalità in tempo reale.
- In modalità in tempo reale, i timer vengono ritardati durante l'attivazione a seconda dell'arrivo dei dati:
- Se un timer è pianificato per le 10:00:00, ma non arrivano dati, il timer non viene attivato immediatamente.
- Se i dati arrivano alle 10:00:10, il timer viene attivato con un ritardo di 10 secondi.
- Se non arrivano dati e il batch a esecuzione lunga sta per terminare, il timer si attiva prima della conclusione del batch.
Funzioni definite dall'utente Python in modalità tempo reale
Databricks supporta la maggior parte delle funzioni definite dall'utente Python in modalità in tempo reale:
| Categoria | Tipo UDF | Supportato |
|---|---|---|
| Senza stato | Funzione scalare Python definita dall'utente (funzioni scalari definite dall'utente - Python) | ✓ |
| Senza stato | Funzione definita dall'utente scalare Arrow | ✓ |
| Senza stato | Funzione scalare Pandas definita dall'utente (funzioni pandas definite dall'utente) | ✓ |
| Senza stato | Funzione Arrow (mapInArrow) |
✓ |
| Senza stato | Funzione Pandas (Map) | ✓ |
| Raggruppamento con stato (UDAF) |
transformWithState (Row solo interfaccia) |
✓ |
| Raggruppamento con stato (UDAF) | applyInPandasWithState |
Non supportato |
| Raggruppamento non con stato (UDAF) | apply |
Non supportato |
| Raggruppamento non con stato (UDAF) | applyInArrow |
Non supportato |
| Raggruppamento non con stato (UDAF) | applyInPandas |
Non supportato |
| Funzione Tabella | UDTF (funzioni di tabella definite dall'utente Python)) | Non supportato |
| Funzione Tabella | UC UDF | Non supportato |
Esistono diversi aspetti da considerare quando si usano UDF Python in modalità tempo reale.
- Per ridurre al minimo la latenza, configurare le dimensioni del batch di Arrow (
spark.sql.execution.arrow.maxRecordsPerBatch) su 1.- Compromesso: questa configurazione ottimizza la latenza a scapito della capacità di trasmissione. Per la maggior parte dei carichi di lavoro, questa impostazione è consigliata.
- Aumentare le dimensioni del batch solo se è necessaria una velocità effettiva maggiore per supportare il volume di input, accettando il potenziale aumento della latenza.
- Le funzioni definite dall'utente e le funzioni di pandas non funzionano bene con un batch Arrow di dimensione 1.
- Se si usano funzioni definite dall'utente o funzioni pandas, impostare le dimensioni del batch Arrow su un valore superiore, ad esempio 100 o superiore.
- Ciò implica una latenza più elevata. Databricks consiglia di usare una funzione o una funzione con funzione o funzione Arrow, se possibile.
- A causa del problema di prestazioni con pandas, transformWithState è supportato solo con l'interfaccia
Row.
Limitazioni
Limitazioni dell'origine
Per Kinesis, la modalità in tempo reale non supporta la modalità di polling. Inoltre, le ripartizioni frequenti potrebbero influire negativamente sulla latenza.
Limitazioni dell'unione
L'operatore Union presenta alcune limitazioni:
- La modalità in tempo reale non supporta l'unione automatica:
- Kafka: non è possibile usare lo stesso oggetto frame di dati di origine e unire frame di dati derivati da esso. Soluzione alternativa: usare diversi dataframe letti dalla stessa origine.
- Kinesis: non è possibile fare l'unione dei data frame derivati dalla stessa origine Kinesis con la stessa configurazione. Soluzione alternativa: oltre a usare diversi dataframe, è possibile assegnare un'opzione "consumerName" diversa a ogni dataframe.
- La modalità in tempo reale non supporta gli operatori con stato (ad esempio ,
aggregatededuplicate, ,transformWithState) definiti prima dell'unione. - La modalità in tempo reale non supporta l'unione con le origini batch.
Limitazione di MapPartitions
mapPartitions in Scala e api Python simili (mapInPandas, mapInArrow) accetta un iteratore dell'intera partizione di input e produce un iteratore dell'intero output con mapping arbitrario tra input e output. Queste API possono causare problemi di prestazioni nella modalità streaming Real-Time bloccando l'intero output, aumentando la latenza. La semantica di queste API non supporta adeguatamente la propagazione della filigrana.
Utilizzare funzioni definite dall'utente scalari combinate con Trasforma tipi di dati complessi o filter per ottenere funzionalità simili.