Visão geral
Você pode configurar as seguintes propriedades ao ler dados do MongoDB no modo de streaming.
Observação
Se você usar SparkConf para definir as configurações de leitura do conector, insira spark.mongodb.read. como prefixo em cada propriedade.
Nome da propriedade | Descrição | ||
|---|---|---|---|
| Obrigatório. | ||
| Obrigatório. | ||
| Obrigatório. | ||
| O comentário a ser anexado à operação de leitura. Os comentários aparecem na saída do Analisador de banco de dados. | ||
| A estratégia de análise a ser usada ao lidar com documentos que não correspondem ao esquema esperado. Esta opção aceita os seguintes valores:
| ||
| Se você definir a | ||
| Chave de configuração MongoClientFactory. | ||
| Especifica um pipeline de agregação personalizado a ser aplicado à coleção antes de enviar dados para o Spark. Uma lista de documentos é semelhante ao seguinte: Pipelines de agregação personalizados devem ser compatíveis com a estratégia do particionador. Por exemplo, estágios de agregação como | ||
| Especifica se o armazenamento em disco deve ser permitido ao executar a agregação. | ||
| Change stream configuration prefix. | ||
|
| ||
| Especifica um esquema parcial de tipos de campo conhecidos a serem usados ao inferir o esquema para a coleção. Para saber mais sobre a |
Alterar configuração do stream
Você pode configurar as seguintes propriedades ao ler um change stream do MongoDB:
Nome da propriedade | Descrição |
|---|---|
| Determina quais valores seu change stream retorna nas operações de atualização. A configuração padrão retorna as diferenças entre o documento original e o documento atualizado. A configuração Para obter mais informações sobre como essa opção de fluxo de alterações funciona, consulte o guia manual do servidor MongoDB Pesquisar documento completo para operação de atualização. Padrão: "default" |
| O número máximo de partições em que o conector Spark divide cada microlote. Os trabalhadores do Spark podem processar essas partições em paralelo. AVISO: especificar um valor superior a |
| Especifica se deseja publicar o documento alterado ou o documento completo do change stream .
Esta configuração substitui a configuração Padrão: |
| Especifica como o connector é iniciado quando nenhum deslocamento está disponível. Esta configuração aceita os seguintes valores:
|
| Determina se incluir a pré-imagem de documentos modificados na saída do fluxo de alteração.
Padrão: |
Especificando propriedades em connection.uri
Se você usa SparkConf para especificar qualquer uma das configurações anteriores, você poderá incluí-las na configuração do connection.uri ou listá-las individualmente.
O exemplo de código abaixo mostra como especificar o banco de dados, coleção e preferência de leitura como parte da configuração do connection.uri:
spark.mongodb.read.connection.uri=mongodb://127.0.0.1/myDB.myCollection?readPreference=primaryPreferred
Para manter o connection.uri curto e facilitar a leitura das configurações, você pode especificá-las individualmente:
spark.mongodb.read.connection.uri=mongodb://127.0.0.1/ spark.mongodb.read.database=myDB spark.mongodb.read.collection=myCollection
Importante
Se você especificar uma configuração em connection.uri e em sua própria linha, a configuração connection.uri terá precedência. Por exemplo, na configuração abaixo, o banco de dados de conexão é foobar, porque é o valor na configuração connection.uri:
spark.mongodb.read.connection.uri=mongodb://127.0.0.1/foobar spark.mongodb.read.database=bar
Especificando múltiplas coleções na propriedade collection
Você pode especificar várias collections na propriedade de configuração change stream collection separando os nomes das collections com uma vírgula. Não adicione um espaço entre as coleções, a menos que o espaço faça parte do nome da coleção.
Especifique várias collections, como mostrado no exemplo a seguir:
... .option("spark.mongodb.collection", "collectionOne,collectionTwo")
Se o nome de uma coleção for "*", ou se o nome incluir uma vírgula ou uma barra invertida (\), você deverá trocar o caractere da seguinte maneira:
Se o nome de uma collection usada em sua opção de configuração
collectioncontiver uma vírgula, o Spark Connector a tratará como duas collections diferentes. Para evitar isso, você deve escapar da vírgula precedendo-a com uma barra invertida (\). Escape de uma coleção chamada "minha coleção" da seguinte maneira:"my\,collection" Se o nome de uma collection usada em sua opção de configuração
collectionfor "*", o Spark Connector o interpretará como uma especificação para verificar todas as collections. Para evitar isso, você deve escapar do asterisco precedendo-o com uma barra invertida (\). Escape de uma collection chamada "*" da seguinte maneira:"\*" Se o nome de uma coleção usada em sua opção de configuração do
collectioncontiver uma barra invertida (\), o Spark Connector tratará a barra invertida como um caractere de escape, o que pode alterar a forma como ele interpreta o valor. Para evitar isso, você deve escapar da barra invertida precedendo-a com outra barra invertida. Escape de uma coleção chamada "\collection" da seguinte maneira:"\\collection" Observação
Ao especificar o nome da coleção como uma string literal em Java, você deve escapar ainda mais de cada barra invertida com outra. Por exemplo, escape de uma collection chamada "\collection" da seguinte maneira:
"\\\\collection"
Você pode transmitir de todas as coleções no banco de dados passando um asterisco() como uma string para o nome da coleção.
Especifique todas as collections como mostrado no exemplo a seguir:
... .option("spark.mongodb.collection", "*")
Se você criar uma collection durante a transmissão a partir de todas as collections, a nova collection será automaticamente incluída no stream.
Você pode descartar coleções a qualquer momento durante a transmissão de várias coleções.
Importante
Inferindo o esquema com múltiplas coleções
Se você definir a opção change.stream.publish.full.document.only como true, o Spark Connector inferirá o esquema de um DataFrame usando o esquema dos documentos digitalizados.
A inferência de esquema acontece no início da transmissão e não leva em conta as coleções criadas durante a transmissão.
Ao transmitir de várias coleções e inferir o esquema, o connector amostra cada coleção sequencialmente. O streaming de um grande número de collections pode fazer com que a inferência de esquema tenha desempenho notoriamente mais lento. Esse impacto no desempenho ocorre apenas ao inferir o esquema.