Freigeben über


DataSource

Eine Basisklasse für Datenquellen.

Diese Klasse stellt eine benutzerdefinierte Datenquelle dar, die das Lesen und/oder Schreiben in die Datenquelle ermöglicht. Die Datenquelle stellt Methoden zum Erstellen von Lesern und Autoren zum Lesen und Schreiben von Daten bereit. Mindestens eine der Methoden reader() oder writer() muss von einer beliebigen Unterklasse implementiert werden, damit die Datenquelle entweder lesbar oder schreibbar ist (oder beides).

Nach der Implementierung dieser Schnittstelle können Sie Ihre Datenquelle mithilfe spark.read.format(...).load() von Daten laden und mit df.write.format(...).save()diesen speichern.

Syntax

from pyspark.sql.datasource import DataSource

class MyDataSource(DataSource):
    @classmethod
    def name(cls):
        return "my_data_source"

Parameter

Parameter Typ Beschreibung
options Wörterbuch Ein Wörterbuch ohne Groß-/Kleinschreibung, das die Optionen für diese Datenquelle darstellt.

Methodik

Methode Beschreibung
name() Gibt eine Zeichenfolge zurück, die den Formatnamen dieser Datenquelle darstellt. Gibt standardmäßig den Klassennamen zurück. Überschreiben, um einen angepassten Kurznamen bereitzustellen.
schema() Gibt das Schema der Datenquelle als Zeichenfolge oder DDL-Zeichenfolge StructType zurück. Wenn sie nicht implementiert ist und kein Schema vom Benutzer bereitgestellt wird, wird eine Ausnahme ausgelöst.
reader(schema) Gibt eine DataSourceReader Instanz zum Lesen von Daten zurück. Erforderlich für lesbare Datenquellen.
writer(schema, overwrite) Gibt eine DataSourceWriter Instanz zum Schreiben von Daten zurück. Erforderlich für schreibbare Datenquellen.
streamWriter(schema, overwrite) Gibt eine DataSourceStreamWriter Instanz zum Schreiben von Daten in eine Streaming-Spüle zurück. Erforderlich für schreibbare Streamingdatenquellen.
simpleStreamReader(schema) Gibt eine SimpleDataSourceStreamReader Instanz zum Lesen von Streamingdaten zurück. Wird nur verwendet, wenn streamReader() sie nicht implementiert ist.
streamReader(schema) Gibt eine DataSourceStreamReader Instanz zum Lesen von Streamingdaten zurück. Übernimmt Vorrang vor simpleStreamReader().

Beispiele

Definieren und Registrieren einer benutzerdefinierten lesbaren Datenquelle:

from pyspark.sql.datasource import DataSource, DataSourceReader, InputPartition

class MyDataSource(DataSource):
    @classmethod
    def name(cls):
        return "my_data_source"

    def schema(self):
        return "a INT, b STRING"

    def reader(self, schema):
        return MyDataSourceReader(schema)

class MyDataSourceReader(DataSourceReader):
    def read(self, partition):
        yield (1, "hello")
        yield (2, "world")

spark.dataSource.register(MyDataSource)
df = spark.read.format("my_data_source").load()
df.show()

Definieren einer Datenquelle mit einem StructType Schema:

from pyspark.sql.types import StructType, StructField, IntegerType, StringType

class MyDataSource(DataSource):
    def schema(self):
        return StructType().add("a", "int").add("b", "string")