Compartilhar via


Fonte de Dados

Uma classe base para fontes de dados.

Essa classe representa uma fonte de dados personalizada que permite a leitura e/ou gravação nela. A fonte de dados fornece métodos para criar leitores e gravadores para ler e gravar dados, respectivamente. Pelo menos um dos métodos reader() ou writer() deve ser implementado por qualquer subclasse para tornar a fonte de dados legível ou gravável (ou ambos).

Depois de implementar essa interface, você pode carregar sua fonte de dados usando spark.read.format(...).load() e salvar dados usando df.write.format(...).save().

Sintaxe

from pyspark.sql.datasource import DataSource

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

Parâmetros

Parâmetro Tipo Descrição
options dicionário Um dicionário que não diferencia maiúsculas de minúsculas que representa as opções dessa fonte de dados.

Methods

Método Descrição
name() Retorna uma cadeia de caracteres que representa o nome do formato dessa fonte de dados. Por padrão, retorna o nome da classe. Substitua para fornecer um nome curto personalizado.
schema() Retorna o esquema da fonte de dados como uma StructType cadeia de caracteres DDL ou de DDL. Se não for implementado e nenhum esquema for fornecido pelo usuário, uma exceção será gerada.
reader(schema) Retorna uma DataSourceReader instância para ler dados. Necessário para fontes de dados legíveis.
writer(schema, overwrite) Retorna uma DataSourceWriter instância para gravar dados. Necessário para fontes de dados graváveis.
streamWriter(schema, overwrite) Retorna uma DataSourceStreamWriter instância para gravar dados em um coletor de streaming. Necessário para fontes de dados de streaming graváveis.
simpleStreamReader(schema) Retorna uma SimpleDataSourceStreamReader instância para ler dados de streaming. Usado somente quando streamReader() não for implementado.
streamReader(schema) Retorna uma DataSourceStreamReader instância para ler dados de streaming. Tem prioridade sobre simpleStreamReader().

Exemplos

Defina e registre uma fonte de dados legível personalizada:

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

Defina uma fonte de dados com um StructType esquema:

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

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