Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Základní třída pro zjednodušené čtečky streamovaných zdrojů dat.
DataSourceStreamReaderOproti tomu SimpleDataSourceStreamReader nevyžaduje plánování datových oddílů. Metoda read() umožňuje čtení dat a plánování nejnovějšího posunu ve stejnou dobu.
Vzhledem k tomu SimpleDataSourceStreamReader , že čte záznamy v ovladači Spark k určení koncového posunu každé dávky bez dělení, je vhodné pouze pro případy zjednodušeného použití, kdy je vstupní rychlost a velikost dávky malá. Používá se DataSourceStreamReader , když je propustnost čtení vysoká a není možné ji zpracovat jedním procesem.
Přidáno do Databricks Runtime 15.3
Syntaxe
from pyspark.sql.datasource import SimpleDataSourceStreamReader
class MyStreamReader(SimpleDataSourceStreamReader):
def initialOffset(self):
return {"offset": 0}
def read(self, start):
...
def readBetweenOffsets(self, start, end):
...
Methods
| Metoda | Description |
|---|---|
initialOffset() |
Vrátí počáteční posun streamovaného zdroje dat. Nový streamovací dotaz začne číst z tohoto posunu. |
read(start) |
Přečte všechna dostupná data od počátečního posunu a vrátí řazenou kolekci členů iterátoru záznamů a koncový posun pro další pokus o čtení. |
readBetweenOffsets(start, end) |
Čte všechna dostupná data mezi určitým počátečním a koncovým posunem. Vyvoláno během zotavení po selhání pro opakované čtení dávky deterministicky. |
commit(end) |
Informuje zdroj, že Spark dokončil zpracování všech dat pro posuny menší než nebo rovno end. |
Příklady
Definujte vlastní zjednodušenou čtečku streamovaných zdrojů dat:
from pyspark.sql.datasource import DataSource, SimpleDataSourceStreamReader
class MyStreamingDataSource(DataSource):
@classmethod
def name(cls):
return "my_streaming_source"
def schema(self):
return "value STRING"
def simpleStreamReader(self, schema):
return MySimpleStreamReader()
class MySimpleStreamReader(SimpleDataSourceStreamReader):
def initialOffset(self):
return {"partition-1": {"index": 0}}
def read(self, start):
end = {"partition-1": {"index": start["partition-1"]["index"] + 1}}
def records():
yield ("hello",)
return records(), end
def readBetweenOffsets(self, start, end):
def records():
yield ("hello",)
return records()
def commit(self, end):
pass
spark.dataSource.register(MyStreamingDataSource)
df = spark.readStream.format("my_streaming_source").load()