Partager via


Source de données

Classe de base pour les sources de données.

Cette classe représente une source de données personnalisée qui permet la lecture et/ou l’écriture dans celle-ci. La source de données fournit des méthodes pour créer des lecteurs et des enregistreurs pour lire et écrire des données, respectivement. Au moins une des méthodes reader() ou writer() doit être implémentée par n’importe quelle sous-classe pour rendre la source de données lisible ou accessible en écriture (ou les deux).

Après avoir implémenté cette interface, vous pouvez charger votre source de données en utilisant spark.read.format(...).load() et enregistrer des données à l’aide df.write.format(...).save()de .

Syntaxe

from pyspark.sql.datasource import DataSource

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

Paramètres

Paramètre Type Description
options dictionnaire Dictionnaire ne respectant pas la casse représentant les options de cette source de données.

Méthodes

Méthode Description
name() Retourne une chaîne représentant le nom de format de cette source de données. Par défaut, retourne le nom de la classe. Remplacez pour fournir un nom court personnalisé.
schema() Retourne le schéma de la source de données sous forme de StructType chaîne ou DDL. S’il n’est pas implémenté et qu’aucun schéma n’est fourni par l’utilisateur, une exception est levée.
reader(schema) Retourne une DataSourceReader instance pour lire des données. Obligatoire pour les sources de données lisibles.
writer(schema, overwrite) Retourne une instance permettant d’écrire DataSourceWriter des données. Obligatoire pour les sources de données accessibles en écriture.
streamWriter(schema, overwrite) Retourne une instance permettant d’écrire DataSourceStreamWriter des données dans un récepteur de streaming. Obligatoire pour les sources de données de diffusion en continu accessibles en écriture.
simpleStreamReader(schema) Retourne une SimpleDataSourceStreamReader instance pour lire les données de streaming. Utilisé uniquement lorsqu’il streamReader() n’est pas implémenté.
streamReader(schema) Retourne une DataSourceStreamReader instance pour lire les données de streaming. Prend la priorité sur simpleStreamReader().

Exemples

Définissez et inscrivez une source de données lisible personnalisée :

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()

Définissez une source de données avec un StructType schéma :

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

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