Partilhar via


Fonte de dados

Uma classe base para fontes de dados.

Esta classe representa uma fonte de dados personalizada que permite ler e/ou escrever nela. A fonte de dados fornece métodos para criar leitores e escritores para leitura e escrita de dados, respetivamente. 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 ambas).

Depois de implementar esta interface, pode carregar a sua fonte de dados usando spark.read.format(...).load() e guardar os 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 insensível a maiúsculas minúsculas que representa as opções para esta fonte de dados.

Methods

Método Descrição
name() Devolve uma string que representa o nome do formato desta fonte de dados. Por defeito, devolve o nome da turma. Override para fornecer um nome curto personalizado.
schema() Devolve o esquema da fonte de dados como uma StructType ou cadeia DDL. Se não for implementado e o utilizador não for fornecido um esquema, é lançada uma exceção.
reader(schema) Devolve uma DataSourceReader instância para leitura de dados. Necessária para fontes de dados legíveis.
writer(schema, overwrite) Devolve uma DataSourceWriter instância para escrever dados. Necessária para fontes de dados graváveis.
streamWriter(schema, overwrite) Devolve uma DataSourceStreamWriter instância para gravar dados num sink de streaming. Necessária para fontes de dados em streaming graváveis.
simpleStreamReader(schema) Devolve uma SimpleDataSourceStreamReader instância para ler dados em streaming. Usado apenas quando streamReader() não é implementado.
streamReader(schema) Devolve uma DataSourceStreamReader instância para ler dados em streaming. Tem prioridade sobre simpleStreamReader().

Exemplos

Defina e registe 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")