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, linguaggi, origini, sink e operatori supportati. Per le limitazioni note, vedere Limitazioni della modalità in tempo reale.
Lingue disponibili
La modalità in tempo reale supporta Scala, Java e Python.
Tipi di calcolo
La modalità in tempo reale supporta i tipi di calcolo seguenti:
| 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
La modalità in tempo reale supporta solo la modalità di aggiornamento:
| Modalità di esecuzione | Supportato |
|---|---|
| Modalità di aggiornamento | ✓ |
| Append mode | Non supportato |
| Modalità completa | Non supportato |
Origini e destinazioni
La modalità in tempo reale supporta le origini e i sink seguenti:
| 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
La modalità in tempo reale supporta la maggior parte degli operatori structured streaming:
Operazioni senza stato
| Operatore | Supportato |
|---|---|
| Selection | ✓ |
| Proiezione | ✓ |
UDFs
| Operatore | Supportato |
|---|---|
| Scala UDF (Funzioni definite dall'utente in Scala) | ✓ (con alcune limitazioni) |
| Python funzione definita dall'utente | ✓ (con alcune limitazioni) |
Aggregazione
| Operatore | Supportato |
|---|---|
| sum | ✓ |
| count | ✓ |
| max | ✓ |
| min | ✓ |
| avg | ✓ |
| Funzioni di aggregazione | ✓ |
Windowing
| Operatore | Supportato |
|---|---|
| Rotolamento | ✓ |
| Scorrevole | ✓ |
| Sessione | Non supportato |
Deduplicazione
| Operatore | Supportato |
|---|---|
| dropDuplicates | ✓ (lo stato è illimitato) |
| dropDuplicatesWithinWatermark (elimina duplicati all'interno del watermark) | Non supportato |
Stream to table join
| Operatore | Supportato |
|---|---|
| Broadcast table join (la tabella deve essere piccola) | ✓ |
| Stream to stream join | 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à in 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.
Python funzioni definite dall'utente in modalità in tempo reale
Databricks supporta la maggior parte delle funzioni definite dall'utente Python in modalità in tempo reale:
Senza stato
| Tipo UDF | Supportato |
|---|---|
| Python funzioni scalari definite dall'utente ( Funzioni scalari definite dall'utente - Python | ✓ |
| Funzione definita dall'utente scalare Arrow | ✓ |
| Funzione scalare Pandas definita dall'utente (funzioni pandas definite dall'utente) | ✓ |
Funzione Arrow (mapInArrow) |
✓ |
| Funzione Pandas (Map) | ✓ |
Raggruppamento con stato (UDAF)
| Tipo UDF | Supportato |
|---|---|
transformWithState (solo Row interfaccia) |
✓ |
applyInPandasWithState |
Non supportato |
Raggruppamento non con stato (UDAF)
| Tipo UDF | Supportato |
|---|---|
apply |
Non supportato |
applyInArrow |
Non supportato |
applyInPandas |
Non supportato |
Funzioni per le tabelle
| Tipo UDF | Supportato |
|---|---|
| UDTF (Python funzioni di tabella definite dall'utente (UDF)) | Non supportato |
| UC UDF | Non supportato |
Quando si usano funzioni definite dall'utente Python in modalità in tempo reale, è necessario considerare diversi aspetti:
- 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.