{"id":17010,"date":"2025-04-07T10:48:50","date_gmt":"2025-04-07T17:48:50","guid":{"rendered":"https:\/\/www.couchbase.com\/blog\/?p=17010"},"modified":"2025-07-08T09:15:31","modified_gmt":"2025-07-08T16:15:31","slug":"pyspark-ga-couchbase-spark-connector","status":"publish","type":"post","link":"https:\/\/www.couchbase.com\/blog\/pt\/pyspark-ga-couchbase-spark-connector\/","title":{"rendered":"Crie aplicativos de IA\/ML altamente dimension\u00e1veis com o Couchbase e o PySpark"},"content":{"rendered":"<p>Temos o prazer de anunciar a disponibilidade geral (GA) do suporte a Python para <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/pyspark.html\" target=\"_blank\" rel=\"noopener\">Conector do Couchbase Spark<\/a>trazendo uma integra\u00e7\u00e3o de primeira classe entre o Couchbase Server e o <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener\">Apache Spark<\/a> para engenheiros de dados Python. Essa vers\u00e3o GA significa que o conector est\u00e1 pronto para a produ\u00e7\u00e3o e \u00e9 totalmente compat\u00edvel, permitindo que os aplicativos PySpark leiam e gravem perfeitamente no Couchbase. Com o banco de dados NoSQL de alto desempenho do Couchbase (com linguagem de consulta SQL++\/SQL++) e o mecanismo de processamento distribu\u00eddo do Spark, os engenheiros de dados agora podem combinar facilmente essas tecnologias para criar pipelines de dados e fluxos de trabalho de an\u00e1lise r\u00e1pidos e dimension\u00e1veis. Em suma, o Couchbase Spark Connector for PySpark permite a integra\u00e7\u00e3o de dados paralela e eficiente, permitindo que voc\u00ea utilize o Spark para ETL\/ELT, an\u00e1lise em tempo real, aprendizado de m\u00e1quina e muito mais em dados armazenados no Couchbase.<\/p>\n<p>Nesta postagem, abordaremos como come\u00e7ar a usar o conector PySpark, demonstraremos opera\u00e7\u00f5es b\u00e1sicas de leitura\/grava\u00e7\u00e3o (baseadas em chave-valor e em consulta) para o banco de dados operacional Couchbase e para os bancos de dados Capella Columnar e compartilharemos dicas de ajuste de desempenho para obter a melhor taxa de transfer\u00eancia. Se voc\u00ea j\u00e1 usa o conector do Couchbase Spark em Scala ou se \u00e9 novo na integra\u00e7\u00e3o Couchbase-Spark, este guia o ajudar\u00e1 a aumentar rapidamente o uso do PySpark para suas necessidades de engenharia de dados.<\/p>\n<h2>Por que o PySpark?<\/h2>\n<p>A inclus\u00e3o do suporte ao PySpark no conector Spark do Couchbase foi motivada pela crescente demanda de engenheiros de dados e desenvolvedores que preferem Python por sua simplicidade e pelo enorme ecossistema Python ML para Spark em fluxos de trabalho de ci\u00eancia de dados e engenharia. Esse suporte garante que as equipes que j\u00e1 usam Python possam agora integrar o Couchbase (quer voc\u00ea esteja usando <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">banco de dados operacional autogerenciado<\/a> ou <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/analytics\/\" target=\"_blank\" rel=\"noopener\">Capella Columnar<\/a> ) em fluxos de trabalho Spark baseados em Python, permitindo uma ado\u00e7\u00e3o mais ampla e processos de dados simplificados.<\/p>\n<p>O dom\u00ednio do Python em casos de uso de IA\/ML, apoiado por estruturas como SparkML, PyTorch, TensorFlow, H2O, DataRobot, scikit-learn e SageMaker, al\u00e9m de ferramentas populares de an\u00e1lise explorat\u00f3ria de dados, como Matplotlib e Plotly, ressalta ainda mais a necessidade de integra\u00e7\u00e3o com o PySpark. Al\u00e9m disso, a compatibilidade com o PySpark desbloqueia pipelines acelerados de ETL e ML, aproveitando a acelera\u00e7\u00e3o de GPU (Spark RAPIDS), e facilita tarefas sofisticadas de engenharia de recursos e de manipula\u00e7\u00e3o de dados usando bibliotecas amplamente adotadas, como Pandas, NumPy e as APIs de engenharia de recursos incorporadas do Spark. Esse novo suporte simplifica significativamente os processos de dados e expande as oportunidades de ado\u00e7\u00e3o do Couchbase nas equipes de ci\u00eancia de dados e engenharia.<\/p>\n<h2>Introdu\u00e7\u00e3o ao Couchbase PySpark<\/h2>\n<p>Os primeiros passos s\u00e3o simples. O Couchbase Spark Connector \u00e9 distribu\u00eddo como um \u00fanico JAR (arquivo Java) que voc\u00ea adiciona ao seu ambiente Spark. Voc\u00ea pode obter o conector no site oficial do <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/download-links.html\" target=\"_blank\" rel=\"noopener\">Site de download do Couchbase<\/a> ou via <a href=\"https:\/\/mvnrepository.com\/artifact\/com.couchbase.client\/spark-connector\" target=\"_blank\" rel=\"noopener\">Coordenadas do Maven<\/a>. Depois que voc\u00ea tiver o JAR, us\u00e1-lo no PySpark \u00e9 t\u00e3o simples quanto configurar sua sess\u00e3o do Spark com as configura\u00e7\u00f5es de conex\u00e3o do conector e do Couchbase.<\/p>\n<p><b>1. Obtenha ou crie um banco de dados operacional Couchbase ou um banco de dados Capella Columnar<\/b><\/p>\n<p>A maneira mais r\u00e1pida de come\u00e7ar a usar o Couchbase \u00e9 usar nosso <a href=\"https:\/\/cloud.couchbase.com\/sign-in\" target=\"_blank\" rel=\"noopener\">Capella DBaaS<\/a>. Uma vez l\u00e1, voc\u00ea pode encontrar seu banco de dados existente ou criar um <a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/databases.html\" target=\"_blank\" rel=\"noopener\">operacional<\/a> ou <a href=\"https:\/\/docs.couchbase.com\/columnar\/admin\/prepare-project.html\" target=\"_blank\" rel=\"noopener\">colunar<\/a> (para an\u00e1lise). Como alternativa, voc\u00ea pode usar nosso <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">Couchbase autogerenciado<\/a>.<\/p>\n<p><b>2. Instale o PySpark (se ainda n\u00e3o o tiver feito)<\/b><\/p>\n<p>Se estiver trabalhando em um ambiente Python, instale o PySpark usando o pip. Por exemplo, em um ambiente virtual:<\/p>\n<pre class=\"nums:false lang:default decode:true\">pip install pyspark<\/pre>\n<p>Isso instalar\u00e1 o Apache Spark para uso com o Python. Se voc\u00ea estiver executando em um cluster Spark ou Databricks existente, o PySpark j\u00e1 poder\u00e1 estar dispon\u00edvel.<\/p>\n<p><b>3. Incluir o JAR do conector do Couchbase Spark<\/b><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/download-links.html#using-from-pyspark\" target=\"_blank\" rel=\"noopener\">Baixar<\/a> o <code>spark-connector-assembly-.jar<\/code> para obter a vers\u00e3o mais recente do conector. Em seguida, ao criar sua sess\u00e3o do Spark ou enviar seu trabalho, forne\u00e7a esse JAR na configura\u00e7\u00e3o. Voc\u00ea pode fazer isso definindo o par\u00e2metro <code>--jarros<\/code> op\u00e7\u00e3o em <code>spark-submit<\/code> ou por meio do construtor SparkSession no c\u00f3digo (como mostrado abaixo).<\/p>\n<p><b>4. Configurar a conex\u00e3o com o Couchbase<\/b><\/p>\n<p>Voc\u00ea precisa especificar a string de conex\u00e3o e as credenciais do cluster do Couchbase (nome de usu\u00e1rio e senha). No Capella, voc\u00ea pode encontrar isso na guia \"Connect\" (Conectar) para os sistemas operacionais e <strong>Configura\u00e7\u00f5es-&gt;Conex\u00e3o String<\/strong> para colunar. Opcionalmente, especifique um bucket ou escopo padr\u00e3o, se necess\u00e1rio (embora voc\u00ea tamb\u00e9m possa especificar bucket\/escopo por opera\u00e7\u00e3o).<\/p>\n<p>Abaixo est\u00e1 uma <b>exemplo r\u00e1pido do PySpark<\/b> que configura um <code>SparkSession<\/code> para se conectar a um cluster do Couchbase e, em seguida, l\u00ea alguns dados:<\/p>\n<pre class=\"nums:false lang:default decode:true\">from pyspark.sql import SparkSession\r\n# Inicializar o SparkSession com o conector e as configura\u00e7\u00f5es de conex\u00e3o do Couchbase\r\n\r\nspark = SparkSession.builder \\\r\n    .appName(\"CouchbaseIntegrationExample\") \\\r\n    .master(\"local[*]\") \\ # usando o Spark local, por exemplo; omita ou ajuste para o cluster do Spark\r\n    .config(\"spark.jars\", \"\/path\/to\/spark-connector-assembly-.jar\") \\\r\n    .config(\"spark.couchbase.connectionString\", \"couchbases:\/\/\") \\\r\n    .config(\"spark.couchbase.username\", \"\") \\\r\n    .config(\"spark.couchbase.password\", \"\") \\\r\n    .getOrCreate()\r\n\r\n# Teste a conex\u00e3o lendo alguns documentos do Couchbase (usando um bucket de amostra)\r\ndf = spark.read.format(\"couchbase.query\") \\\r\n    .option(\"bucket\", \"bucket_name\") \\\r\n    .op\u00e7\u00e3o(\"escopo\", \"nome_do_escopo\") \\\r\n    .op\u00e7\u00e3o(\"cole\u00e7\u00e3o\", \"nome_da_cole\u00e7\u00e3o\") \\\r\n    .load()\r\n\r\ndf.printSchema()\r\ndf.show(5)<\/pre>\n<p>No c\u00f3digo acima, configuramos a sess\u00e3o do Spark para incluir o JAR do conector do Couchbase e apont\u00e1-lo para um cluster do Couchbase. Em seguida, criamos um DataFrame <code>df<\/code> lendo o <code>nome_do_balde<\/code> (especificamente o balde s<code>cope_name.collection_name<\/code> cole\u00e7\u00e3o) por meio do servi\u00e7o Query.<\/p>\n<p>No restante deste documento, presumimos que voc\u00ea tenha carregado nosso conjunto de dados de amostra <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/current\/ref\/travel-app-data-model.html\" target=\"_blank\" rel=\"noopener\">amostra de viagem <\/a>que pode ser feito para o Couchbase <a href=\"https:\/\/docs.couchbase.com\/cloud\/get-started\/run-first-queries.html\" target=\"_blank\" rel=\"noopener\">Capella operacional<\/a> ou <a href=\"https:\/\/docs.couchbase.com\/columnar\/intro\/examples.html#travel-sample\" target=\"_blank\" rel=\"noopener\">Colunar<\/a> com muita facilidade.<\/p>\n<h2>Leitura\/grava\u00e7\u00e3o no Couchbase usando o PySpark<\/h2>\n<p>Quando sua sess\u00e3o do Spark estiver conectada ao Couchbase, voc\u00ea poder\u00e1 executar <b>opera\u00e7\u00f5es de valor-chave<\/b> (para grava\u00e7\u00f5es) e <b>opera\u00e7\u00f5es de consulta<\/b> (usando SQL++ para leitura e grava\u00e7\u00e3o) por meio de DataFrames.<\/p>\n<p>A tabela a seguir mostra o formato suportado pelo conector Sparks para ler e gravar em bancos de dados Couchbase e colunares:<\/p>\n<table style=\"border: 1px solid Gainsboro;\">\n<tbody>\n<tr style=\"border: 1px solid Gainsboro;\">\n<td style=\"border: 1px solid Gainsboro; width: 15%;\"><\/td>\n<td style=\"border: 1px solid Gainsboro;\"><b>Banco de dados operacional do Couchbase\/Capella<\/b><\/td>\n<td style=\"border: 1px solid Gainsboro;\"><b>Banco de dados colunar Capella<\/b><\/td>\n<\/tr>\n<tr style=\"border: 1px solid Gainsboro;\">\n<td style=\"border: 1px solid Gainsboro; background-color: white;\">Opera\u00e7\u00f5es de leitura<\/td>\n<td style=\"border: 1px solid Gainsboro; background-color: white;\"><code>read.format(\"couchbase.query\")<\/code><\/td>\n<td style=\"border: 1px solid Gainsboro; background-color: white;\"><code>read.format(\"couchbase.columnar\")<\/code><\/td>\n<\/tr>\n<tr style=\"border: 1px solid Gainsboro;\">\n<td style=\"border: 1px solid Gainsboro;\">Opera\u00e7\u00f5es de grava\u00e7\u00e3o<\/td>\n<td style=\"border: 1px solid Gainsboro;\">(recomend\u00e1vel usar o servi\u00e7o de dados)<\/p>\n<p><code>write.format(\"couchbase.kv\")<\/code><\/p>\n<p><code>write.format(\"couchbase.query\")<\/code><\/td>\n<td><code>write.format(\"couchbase.columnar\")<\/code><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h3>Leitura do Couchbase com um DataFrame de consulta<\/h3>\n<p>O Couchbase Spark Connector permite que voc\u00ea carregue dados de um bucket do Couchbase como um Spark DataFrame por meio de consultas SQL++. Usando o leitor de DataFrame com formato <code>couchbase.query<\/code>Se voc\u00ea quiser ler documentos de uma cole\u00e7\u00e3o, pode especificar um bucket (e escopo\/cole\u00e7\u00e3o) e par\u00e2metros de consulta opcionais. Por exemplo, para ler todos os documentos de uma cole\u00e7\u00e3o ou um subconjunto definido por um filtro:<\/p>\n<pre class=\"nums:false lang:default decode:true\"># Ler todos os documentos de uma cole\u00e7\u00e3o do Couchbase usando o servi\u00e7o Query\r\nairlines_df = spark.read.format(\"couchbase.query\") \\\r\n    .option(\"bucket\", \"travel-sample\") \\\r\n    .op\u00e7\u00e3o(\"escopo\", \"invent\u00e1rio\") \\\r\n    .option(\"collection\", \"airline\") \\\r\n    .load()\r\n\r\nExemplo do #: filtrar o DataFrame usando o Spark (enviar\u00e1 para o Couchbase sempre que poss\u00edvel)\r\nusa_airlines_df = airlines_df.filter(\"country = 'United States'\")\r\nusa_airlines_df.show(5)<\/pre>\n<p>Neste exemplo, <code>companhias a\u00e9reas_df<\/code> carrega todos os documentos do <code>travel-sample.inventory.airline<\/code> em um DataFrame do Spark. Em seguida, aplicamos um filtro para encontrar companhias a\u00e9reas sediadas nos Estados Unidos. O conector tentar\u00e1 <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#aggregate-push-down\" target=\"_blank\" rel=\"noopener\">empurrar para baixo<\/a> para o Couchbase para que dados desnecess\u00e1rios n\u00e3o sejam transferidos (ou seja, ele incluir\u00e1 os filtros <code>WHERE country = 'United States' (pa\u00eds = 'Estados Unidos')<\/code> na consulta SQL++ que ele executa, se poss\u00edvel). O resultado, <code>usa_airlines_df<\/code>pode ser usado como qualquer outro DataFrame no Spark (por exemplo, voc\u00ea pode uni-lo a outros DataFrames, aplicar agrega\u00e7\u00f5es etc.).<\/p>\n<p>Sob o cap\u00f4, o <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_partitioning\" target=\"_blank\" rel=\"noopener\">parti\u00e7\u00f5es de conectores<\/a> os resultados da consulta em v\u00e1rias tarefas, se configurado (mais sobre isso em <i>Ajuste de desempenho<\/i> abaixo) e usa o servi\u00e7o Query do Couchbase (alimentado pelo mecanismo SQL++) para recuperar os dados. Cada parti\u00e7\u00e3o do Spark corresponde a um subconjunto de dados recuperados por uma consulta SQL++ equivalente. Isso permite leituras paralelas do Couchbase, aproveitando a natureza distribu\u00edda do Spark e do Couchbase.<\/p>\n<h3>Grava\u00e7\u00e3o no Couchbase com opera\u00e7\u00f5es de chave-valor (KV) (recomendado)<\/h3>\n<p>O conector tamb\u00e9m oferece suporte \u00e0 grava\u00e7\u00e3o de dados no Couchbase, seja por meio do <b>Servi\u00e7o de dados (KV)<\/b> ou por meio do servi\u00e7o Query (executando o SQL++ <code>INSERT\/UPSERT<\/code> comandos para voc\u00ea). O <b>recomendado<\/b> para a maioria dos casos de uso \u00e9 usar o <b>Fonte de dados chave-valor<\/b> (<code>formato(\"couchbase.kv\")<\/code>) para <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_persistence\" target=\"_blank\" rel=\"noopener\">melhor desempenho<\/a>. No modo de valor-chave, cada tarefa do Spark gravar\u00e1 documentos diretamente nos n\u00f3s de dados do Couchbase.<\/p>\n<p>Ao gravar um DataFrame no Couchbase, voc\u00ea deve garantir que haja um ID exclusivo para cada documento (j\u00e1 que o Couchbase exige um ID de documento). Por padr\u00e3o, o conector procura uma coluna chamada <code>__META_ID<\/code> (ou <code>META_ID<\/code> em vers\u00f5es mais recentes) no DataFrame para o ID do documento. Voc\u00ea tamb\u00e9m pode especificar um campo de ID personalizado por meio da op\u00e7\u00e3o <code>IdFieldName<\/code> op\u00e7\u00e3o.<\/p>\n<p>Por exemplo, suponha que tenhamos um DataFrame do Spark <code>new_airlines_df<\/code> que queremos gravar no Couchbase. Ele tem uma coluna <code>identifica\u00e7\u00e3o da companhia a\u00e9rea<\/code> que deve servir como a chave do documento do Couchbase, e o restante das colunas \u00e9 o conte\u00fado do documento:<\/p>\n<pre class=\"nums:false lang:default decode:true\"># Suponha que new_airlines_df seja um DataFrame que queremos gravar no Couchbase\r\n# Ele cont\u00e9m uma coluna \"airline_id\" para ser usada como ID do documento.\r\nnew_airlines_df.write.format(\"couchbase.kv\") \\\r\n    .option(\"bucket\", \"mybucket\") \\\r\n    .op\u00e7\u00e3o(\"escopo\", \"myscope\") \\\r\n    .option(\"collection\", \"airlines\") \\\r\n    .option(\"idFieldName\", \"airline_id\") \\\r\n    .save()<\/pre>\n<h3>Grava\u00e7\u00e3o no Couchbase com opera\u00e7\u00f5es de consulta (SQL++)<\/h3>\n<p>Embora recomendemos o uso do servi\u00e7o de dados (KV) como acima, pois ele \u00e9 normalmente mais r\u00e1pido do que o servi\u00e7o de consulta, se preferir, voc\u00ea tamb\u00e9m pode gravar por meio do servi\u00e7o de consulta usando <code>format(\"couchbase.query\")<\/code> na grava\u00e7\u00e3o. Isso executar\u00e1 internamente instru\u00e7\u00f5es SQL++ UPSERT para cada linha. Isso pode ser \u00fatil se voc\u00ea precisar aproveitar um recurso do SQL++ (por exemplo, transforma\u00e7\u00f5es no lado do servidor), mas para inser\u00e7\u00f5es\/atualiza\u00e7\u00f5es simples, a abordagem KV \u00e9 mais eficiente.<\/p>\n<pre class=\"nums:false lang:default decode:true\">df.write.format(\"couchbase.query\") \\\r\n    .option(\"bucket\", \"mybucket\") \\\r\n    .op\u00e7\u00e3o(\"escopo\", \"myscope\") \\\r\n    .option(\"collection\", \"airlines\") \\\r\n    .mode(\"overwrite\") \\\r\n    .save()<\/pre>\n<p>Na pr\u00f3xima se\u00e7\u00e3o, vamos modificar esses casos b\u00e1sicos de leitura\/grava\u00e7\u00e3o para o mais recente produto de an\u00e1lise do Couchbase, o Capella Columnar.<\/p>\n<h2>Suporte do PySpark para Capella Columnar<\/h2>\n<p>Um dos principais novos recursos do Couchbase Spark Connector GA \u00e9 o suporte ao Capella Columnar. O Capella Columnar \u00e9 um servi\u00e7o de banco de dados anal\u00edtico nativo de JSON no Couchbase Capella que armazena dados em um formato orientado por coluna para an\u00e1lise de alto desempenho<\/p>\n<h3>Leitura de dados em formato colunar com o PySpark<\/h3>\n<p>A leitura de dados de um cluster do Couchbase Capella Columnar no PySpark \u00e9 semelhante ao cluster operacional do Couchbase, exceto por tr\u00eas altera\u00e7\u00f5es:<\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Use o <code>formato(\"couchbase.columnar\")<\/code> para especificar que a conex\u00e3o \u00e9 para servi\u00e7o colunar.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">A string de conex\u00e3o para o columnar pode ser recuperada na interface do usu\u00e1rio do Capella.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Voc\u00ea tamb\u00e9m especificar\u00e1 o conjunto de dados a ser carregado, fornecendo os nomes do banco de dados, do escopo e da cole\u00e7\u00e3o (an\u00e1logo a bucket\/scope\/collection no Couchbase) como op\u00e7\u00f5es<\/li>\n<\/ol>\n<p>Depois que o Spark estiver configurado, voc\u00ea poder\u00e1 usar a API de leitura do Spark DataFrame para carregar dados do servi\u00e7o colunar:<\/p>\n<pre class=\"nums:false lang:default decode:true\">from pyspark.sql import SparkSession\r\n# Inicialize o SparkSession com as configura\u00e7\u00f5es do Couchbase (supondo que o jar do conector esteja dispon\u00edvel)\r\nspark = SparkSession.builder \\\r\n    .appName(\"Exemplo colunar de conector do Couchbase Spark\") \\\r\n    .config(\"spark.couchbase.connectionString\", \"couchbases:\/\/your.columnar.connection.string\") \\\r\n    .config(\"spark.couchbase.username\", \"YourColumnarUsername\") \\\\\r\n    .config(\"spark.couchbase.password\", \"YourColumnarPassword\") \\\r\n    .getOrCreate()\r\n\r\n# Ler um DataFrame do Couchbase Capella Columnar (cole\u00e7\u00e3o travel-sample.inventory.airline)\r\nairlines_df = spark.read.format(\"couchbase.columnar\") \\\r\n    .option(\"database\", \"travel-sample\") \\\r\n    .option(\"scope\", \"inventory\") \\\r\n    .option(\"collection\", \"airline\") \\\r\n    .load()<\/pre>\n<p>Neste exemplo, o resultado <code>companhias a\u00e9reas_df<\/code> \u00e9 um Spark DataFrame normal - voc\u00ea pode inspecion\u00e1-lo, executar transforma\u00e7\u00f5es e realizar a\u00e7\u00f5es como <code>.count()<\/code> ou <code>.show()<\/code> como de costume. Por exemplo, <code>airlines_df.show(5)<\/code> imprimir\u00e1 alguns documentos da companhia a\u00e9rea e <code>airlines_df.count()<\/code> retornar\u00e1 o n\u00famero de documentos na cole\u00e7\u00e3o. Nos bastidores, o conector infere automaticamente um esquema para os documentos JSON por amostragem at\u00e9 um determinado n\u00famero de registros (por padr\u00e3o, 1000). Todos os campos que aparecem consistentemente nos documentos amostrados tornam-se colunas no DataFrame, com os tipos de dados Spark apropriados.<\/p>\n<p>Observe que, se seus documentos tiverem esquemas variados, a infer\u00eancia poder\u00e1 produzir um esquema que inclua a uni\u00e3o de todos os campos (os campos n\u00e3o presentes em alguns documentos ser\u00e3o nulos nessas linhas). Nos casos em que o esquema est\u00e1 evoluindo ou em que voc\u00ea deseja restringir quais registros s\u00e3o considerados, \u00e9 poss\u00edvel fornecer um filtro expl\u00edcito (predicado) ao leitor, conforme descrito a seguir.<\/p>\n<h3>Consulta de um conjunto de dados colunares no Couchbase via Spark<\/h3>\n<p>Muitas vezes, talvez voc\u00ea n\u00e3o queira carregar uma cole\u00e7\u00e3o inteira, especialmente se ela for grande. Voc\u00ea pode otimizar o desempenho enviando os predicados de filtro diretamente para o servi\u00e7o Capella Columnar ao carregar dados, evitando a transfer\u00eancia desnecess\u00e1ria de dados. Use <code>.op\u00e7\u00e3o(\"filtro\", \"\")<\/code> para aplicar uma cl\u00e1usula SQL++ WHERE durante a opera\u00e7\u00e3o de leitura. Por exemplo, para carregar somente companhias a\u00e9reas baseadas nos Estados Unidos:<\/p>\n<pre class=\"nums:false lang:default decode:true\">usa_airlines_df = spark.read.format(\"couchbase.columnar\") \\\r\n    .option(\"database\", \"travel-sample\") \\\r\n    .option(\"scope\", \"inventory\") \\\r\n    .op\u00e7\u00e3o(\"cole\u00e7\u00e3o\", \"companhia a\u00e9rea\") \\\r\n    .option(\"filter\", \"country = 'United States'\") \\\r\n    .load()\r\n\r\nprint(usa_airlines_df.count()) # Somente companhias a\u00e9reas em que o pa\u00eds = 'Estados Unidos'<\/pre>\n<p>O conector executa esse filtro diretamente na origem, recuperando apenas os documentos relevantes. Voc\u00ea tamb\u00e9m pode fazer push down de proje\u00e7\u00f5es (selecionando campos espec\u00edficos) e agrega\u00e7\u00f5es em alguns casos - o conector descarregar\u00e1 <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#aggregate-push-down\" target=\"_blank\" rel=\"noopener\">agregados simples<\/a> como <code>CONTAGEM<\/code>, <code>MIN<\/code>, <code>MAX<\/code>e <code>SUM<\/code> para o mecanismo Columnar sempre que poss\u00edvel, em vez de comput\u00e1-los no Spark, para melhorar o desempenho<\/p>\n<p>Depois que os dados s\u00e3o carregados em um DataFrame, voc\u00ea pode executar as fun\u00e7\u00f5es padr\u00e3o <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/columnar.html#spark-sql\" target=\"_blank\" rel=\"noopener\">Transforma\u00e7\u00f5es do Spark<\/a>, jun\u00e7\u00f5es e agrega\u00e7\u00f5es. Por exemplo, para contar as companhias a\u00e9reas por pa\u00eds usando o Spark SQL, voc\u00ea pode at\u00e9 criar uma visualiza\u00e7\u00e3o tempor\u00e1ria para executar consultas do Spark SQL nos dados da seguinte forma:<\/p>\n<pre class=\"nums:false lang:default decode:true\">airlines_df.createOrReplaceTempView(\"airlines_view\")\r\nresult_df = spark.sql(\"\"\"\r\n    SELECT country, COUNT(*) AS airline_count\r\n    FROM airlines_view\r\n    GROUP BY country\r\n    ORDER BY airline_count DESC\r\n\"\"\")\r\nresult_df.show(10)<\/pre>\n<p>Essa consulta \u00e9 executada inteiramente no mecanismo Spark, oferecendo flexibilidade para integrar perfeitamente os dados do Couchbase em fluxos de trabalho anal\u00edticos complexos.<\/p>\n<p>Tendo abordado as leituras e grava\u00e7\u00f5es b\u00e1sicas, vamos ver como voc\u00ea pode ajustar o desempenho ao mover grandes volumes de dados entre o Couchbase e o Spark.<\/p>\n<h2>Dicas de ajuste de desempenho<\/h2>\n<p>Para maximizar o rendimento e a efici\u00eancia ao usar o conector PySpark do Couchbase, considere as pr\u00e1ticas recomendadas a seguir.<\/p>\n<h3>Ajuste de suas opera\u00e7\u00f5es de leitura<\/h3>\n<p><b>Usar o particionamento de consultas para paralelismo<\/b><br \/>\n(<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">banco de dados operacional autogerenciado<\/a> ou <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/analytics\/\" target=\"_blank\" rel=\"noopener\">Capella Columnar<\/a>)<\/p>\n<p>Ao ler por meio do servi\u00e7o Query para banco de dados operacional ou colunar, aproveite a capacidade do conector de particionar os resultados da consulta. Voc\u00ea pode especificar um <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_partitioning\" target=\"_blank\" rel=\"noopener\">partitionCount<\/a> (e um campo de particionamento num\u00e9rico com limites inferior\/superior) para a leitura do DataFrame. Uma boa regra geral \u00e9 definir <code>partitionCount<\/code> para <b>pelo menos o n\u00famero total de n\u00facleos de CPU do servi\u00e7o de consulta<\/b> dispon\u00edveis em seu cluster do Couchbase. Isso garante que o Spark executar\u00e1 v\u00e1rias consultas em paralelo, aproveitando todos os n\u00f3s de consulta. Por exemplo, se o servi\u00e7o de consulta do seu cluster do Couchbase tiver 8 n\u00facleos no total, defina <code>partitionCount &gt;= 8<\/code> de modo que pelo menos 8 consultas SQL++ paralelas sejam emitidas. Isso pode aumentar drasticamente a taxa de transfer\u00eancia de leitura ao utilizar todos os n\u00f3s de consulta simultaneamente. Observe que tamb\u00e9m \u00e9 necess\u00e1rio ter n\u00facleos suficientes no cluster do Spark para executar esse n\u00famero de consultas paralelas.<\/p>\n<p><b>Aproveite os \u00edndices de cobertura para aumentar a efici\u00eancia das consultas<br \/>\n<\/b>(<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">banco de dados operacional autogerenciado<\/a>)<b><br \/>\n<\/b><\/p>\n<p>Se estiver usando consultas SQL++, tente consultar por meio de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/covering-indexes.html\" target=\"_blank\" rel=\"noopener\">\u00edndices de cobertura<\/a> sempre que poss\u00edvel. Um \u00edndice de cobertura \u00e9 um \u00edndice que inclui <i>todos<\/i> campos de que sua consulta precisa, de modo que a consulta possa ser atendida inteiramente a partir do \u00edndice, sem buscar no servi\u00e7o de dados. As consultas cobertas evitam o salto extra na rede para buscar documentos completos, portanto <b>proporcionando melhor desempenho<\/b>. Projete seus \u00edndices secund\u00e1rios do Couchbase para incluir os campos que voc\u00ea filtra <i>e<\/i> os campos que voc\u00ea retorna, se poss\u00edvel. Isso pode significar a cria\u00e7\u00e3o de \u00edndices espec\u00edficos para seus trabalhos Spark que cubram exatamente os dados necess\u00e1rios.<\/p>\n<p><b>Garantir r\u00e9plicas de \u00edndice para evitar gargalos<br \/>\n<\/b>(<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">banco de dados operacional autogerenciado<\/a>)<\/p>\n<p>Al\u00e9m de usar \u00edndices de cobertura, certifique-se de que seus \u00edndices sejam replicados em v\u00e1rios n\u00f3s de \u00edndice. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/services-and-indexes\/indexes\/index-replication.html#index-replication\" target=\"_blank\" rel=\"noopener\">Replica\u00e7\u00e3o de \u00edndices<\/a> n\u00e3o apenas fornece alta disponibilidade, mas tamb\u00e9m permite que as consultas sejam <b>balanceamento de carga entre c\u00f3pias de \u00edndices em diferentes n\u00f3s para aumentar a taxa de transfer\u00eancia<\/b>. Na pr\u00e1tica, se voc\u00ea tiver (por exemplo) 3 n\u00f3s de \u00edndice, a replica\u00e7\u00e3o de \u00edndices importantes entre eles significa que as consultas paralelas do conector do Spark podem atingir diferentes n\u00f3s de \u00edndice, em vez de atingir um \u00fanico n\u00f3.<\/p>\n<h3>Ajuste de suas opera\u00e7\u00f5es de grava\u00e7\u00e3o<\/h3>\n<p><b>Prefira o servi\u00e7o Data para grava\u00e7\u00f5es em massa<\/b><br \/>\n(<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">banco de dados operacional autogerenciado<\/a>)<\/p>\n<p>Recomendamos usar a fonte de dados de valor-chave (<a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_persistence\" target=\"_blank\" rel=\"noopener\">Servi\u00e7o de dados<\/a>) em vez do servi\u00e7o Query para opera\u00e7\u00f5es de grava\u00e7\u00e3o. A grava\u00e7\u00e3o por meio do servi\u00e7o Data (upserts diretos de KV) \u00e9 normalmente <b>v\u00e1rias vezes mais r\u00e1pido<\/b> do que fazer inser\u00e7\u00f5es baseadas em SQL++. De fato, benchmarks internos mostraram que a grava\u00e7\u00e3o via KV pode ser cerca de <i>3x mais r\u00e1pido<\/i> do que usar o SQL++ em trabalhos do Spark. Isso ocorre porque o servi\u00e7o de dados pode ingerir documentos em paralelo diretamente nos n\u00f3s respons\u00e1veis, com menor lat\u00eancia por opera\u00e7\u00e3o. Observe que os \u00edndices s\u00e3o atualizados separadamente, se necess\u00e1rio, para esses novos documentos, pois as grava\u00e7\u00f5es KV n\u00e3o acionam automaticamente as atualiza\u00e7\u00f5es de \u00edndice al\u00e9m do \u00edndice prim\u00e1rio.<\/p>\n<p><b>Aumentar as parti\u00e7\u00f5es de grava\u00e7\u00e3o para grava\u00e7\u00f5es do servi\u00e7o de consulta<\/b><br \/>\n(<a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/products\/server\/\" target=\"_blank\" rel=\"noopener\">banco de dados operacional autogerenciado<\/a>)<\/p>\n<p>Embora n\u00e3o seja recomendado, se voc\u00ea decidir usar o <code>couchbase.query<\/code> para grava\u00e7\u00e3o (por exemplo, se estiver executando transforma\u00e7\u00f5es no lado do servidor durante a grava\u00e7\u00e3o), otimize o desempenho usando um n\u00famero alto de parti\u00e7\u00f5es de grava\u00e7\u00e3o. Voc\u00ea pode reparticionar seu DataFrame antes da grava\u00e7\u00e3o para que o Spark execute muitas tarefas de grava\u00e7\u00e3o simult\u00e2neas. Uma diretriz aproximada \u00e9 usar na ordem de <b>centenas de parti\u00e7\u00f5es<\/b> para grava\u00e7\u00f5es em grande escala via SQL++. Por exemplo, usando cerca de <i>128 parti\u00e7\u00f5es por n\u00f3 de consulta CPU<\/i> \u00e9 um ponto de partida que alguns usu\u00e1rios consideram eficaz. Isso significa que, se voc\u00ea tiver 8 n\u00facleos de consulta, tente ~1024 parti\u00e7\u00f5es. A ideia \u00e9 inundar o servi\u00e7o de consulta com instru\u00e7\u00f5es UPSERT paralelas suficientes para maximizar a taxa de transfer\u00eancia. Seja cauteloso e encontre o equil\u00edbrio certo para seu cluster - uma simultaneidade muito alta pode sobrecarregar o servi\u00e7o de consulta. Monitore a taxa de transfer\u00eancia de consultas do Couchbase e fa\u00e7a os ajustes necess\u00e1rios.<\/p>\n<p>Seguindo essas dicas de ajuste - alinhando a contagem de parti\u00e7\u00f5es com os recursos do cluster, indexando de forma inteligente e escolhendo o servi\u00e7o certo para o trabalho - voc\u00ea pode obter o desempenho ideal para a integra\u00e7\u00e3o Couchbase-Spark. Fique de olho nas m\u00e9tricas de trabalho do Spark e nas estat\u00edsticas de desempenho do Couchbase (dispon\u00edveis na interface do usu\u00e1rio e nos registros do Couchbase) para identificar quaisquer gargalos (por exemplo, se um n\u00f3 de consulta estiver fazendo todo o trabalho ou se a rede estiver saturada) e ajuste a configura\u00e7\u00e3o conforme necess\u00e1rio.<\/p>\n<h2>Comunidade e suporte<\/h2>\n<p>O suporte ao PySpark do Couchbase foi desenvolvido com base no Conector Spark do Couchbase para o Couchbase e no <a href=\"https:\/\/github.com\/couchbase\/couchbase-spark-connector\" target=\"_blank\" rel=\"noopener\">\u00e9 de c\u00f3digo aberto<\/a>e incentivamos voc\u00ea a contribuir, fornecer feedback e participar da conversa. Voc\u00ea pode acessar nosso abrangente <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/pyspark.html\" target=\"_blank\" rel=\"noopener\">documenta\u00e7\u00e3o<\/a>, junte-se ao <a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/\" target=\"_blank\" rel=\"noopener\">F\u00f3runs do Couchbase<\/a> ou <a href=\"https:\/\/discord.com\/invite\/K7NPMPGrPk\" target=\"_blank\" rel=\"noopener\">Disc\u00f3rdia do Couchbase<\/a>.<\/p>\n<h2>Leitura adicional<\/h2>\n<p>Para obter mais informa\u00e7\u00f5es e documenta\u00e7\u00e3o detalhada, consulte o site oficial do <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener\">Documenta\u00e7\u00e3o do conector do Couchbase Spark<\/a> e a se\u00e7\u00e3o relevante sobre <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/pyspark.html\" target=\"_blank\" rel=\"noopener\">PySpark<\/a>:<\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/pyspark.html\" target=\"_blank\" rel=\"noopener\">Documenta\u00e7\u00e3o do PySpark do Couchbase<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/couchbase\/couchbase-spark-connector\" target=\"_blank\" rel=\"noopener\">Reposit\u00f3rio do GitHub do conector do Couchbase Spark<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.couchbase.com\/blog\/pt\/forums\/tag\/spark\/\" target=\"_blank\" rel=\"noopener\">F\u00f3runs do Couchbase (se\u00e7\u00e3o Conector Spark)<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/couchbase\/couchbase-spark-connector\/tree\/master\/src\/test\/pyspark\/examples\/basic\" target=\"_blank\" rel=\"noopener\">Exemplo de notebook Jupyter do conector PySpark do Couchbase<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/couchbase\/couchbase-spark-connector\/blob\/master\/src\/test\/pyspark\/examples\/ml\/pyspark_ml_example_hotel_cancellations.ipynb\" target=\"_blank\" rel=\"noopener\">Couchbase PySpark ML Exemplo Jupyter Notebook: Cancelamentos de hot\u00e9is<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Boa codifica\u00e7\u00e3o!<\/p>\n<p>A equipe do Couchbase<\/p>\n<p><br style=\"font-weight: 400;\" \/><br style=\"font-weight: 400;\" \/><\/p>","protected":false},"excerpt":{"rendered":"<p>We are excited to announce the General Availability (GA) of the Python support for Couchbase Spark Connector, bringing first-class integration between Couchbase Server and Apache Spark to Python data engineers\u200b. This GA release means the connector is production-ready and fully [&hellip;]<\/p>","protected":false},"author":85357,"featured_media":17013,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"inline_featured_image":false,"footnotes":""},"categories":[1815,10129,2242,2294,2225,1816,10133,9417,9139,9141,1812],"tags":[10105,10104],"ppma_author":[9987],"class_list":["post-17010","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices-and-tutorials","category-columnar","category-connectors","category-analytics","category-cloud","category-couchbase-server","category-engineering","category-performance","category-python","category-scala","category-n1ql-query","tag-data-engineering","tag-pyspark"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.0 (Yoast SEO v26.0) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Build Highly Scalable AI\/ML Applications With Couchbase and PySpark - The Couchbase Blog<\/title>\n<meta name=\"description\" content=\"Couchbase Spark Connector now supports PySpark! Build fast, scalable data pipelines and ML apps with Couchbase and Apache Spark in Python.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.couchbase.com\/blog\/pt\/pyspark-ga-couchbase-spark-connector\/\" \/>\n<meta property=\"og:locale\" content=\"pt_BR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark\" \/>\n<meta property=\"og:description\" content=\"Couchbase Spark Connector now supports PySpark! Build fast, scalable data pipelines and ML apps with Couchbase and Apache Spark in Python.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.couchbase.com\/blog\/pt\/pyspark-ga-couchbase-spark-connector\/\" \/>\n<meta property=\"og:site_name\" content=\"The Couchbase Blog\" \/>\n<meta property=\"article:published_time\" content=\"2025-04-07T17:48:50+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2025-07-08T16:15:31+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1340\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Vishal Dhiman, Sr. Product Manager\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Vishal Dhiman, Sr. Product Manager\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"12 minutos\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/\"},\"author\":{\"name\":\"Vishal Dhiman, Sr. Product Manager\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/853c7ac2867fb9e801ff769321364961\"},\"headline\":\"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark\",\"datePublished\":\"2025-04-07T17:48:50+00:00\",\"dateModified\":\"2025-07-08T16:15:31+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/\"},\"wordCount\":2546,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png\",\"keywords\":[\"data engineering\",\"PySpark\"],\"articleSection\":[\"Best Practices and Tutorials\",\"Columnar\",\"Connectors\",\"Couchbase Analytics\",\"Couchbase Capella\",\"Couchbase Server\",\"Engineering\",\"High Performance\",\"Python\",\"Scala\",\"SQL++ \/ N1QL Query\"],\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/\",\"name\":\"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark - The Couchbase Blog\",\"isPartOf\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png\",\"datePublished\":\"2025-04-07T17:48:50+00:00\",\"dateModified\":\"2025-07-08T16:15:31+00:00\",\"description\":\"Couchbase Spark Connector now supports PySpark! Build fast, scalable data pipelines and ML apps with Couchbase and Apache Spark in Python.\",\"breadcrumb\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#breadcrumb\"},\"inLanguage\":\"pt-BR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png\",\"width\":2560,\"height\":1340,\"caption\":\"Couchbase PySpark connector released\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.couchbase.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#website\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"name\":\"The Couchbase Blog\",\"description\":\"Couchbase, the NoSQL Database\",\"publisher\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"pt-BR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png\",\"width\":218,\"height\":34,\"caption\":\"The Couchbase Blog\"},\"image\":{\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/853c7ac2867fb9e801ff769321364961\",\"name\":\"Vishal Dhiman, Sr. Product Manager\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"pt-BR\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/58e586f8e4645cc672ef6f140799b4b3\",\"url\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/09\/vishal-dhiman-couchbase.jpg\",\"contentUrl\":\"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/09\/vishal-dhiman-couchbase.jpg\",\"caption\":\"Vishal Dhiman, Sr. Product Manager\"},\"url\":\"https:\/\/www.couchbase.com\/blog\/pt\/author\/vishald\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark - The Couchbase Blog","description":"O Couchbase Spark Connector agora oferece suporte ao PySpark! Crie pipelines de dados r\u00e1pidos e dimension\u00e1veis e aplicativos de ML com o Couchbase e o Apache Spark em Python.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.couchbase.com\/blog\/pt\/pyspark-ga-couchbase-spark-connector\/","og_locale":"pt_BR","og_type":"article","og_title":"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark","og_description":"Couchbase Spark Connector now supports PySpark! Build fast, scalable data pipelines and ML apps with Couchbase and Apache Spark in Python.","og_url":"https:\/\/www.couchbase.com\/blog\/pt\/pyspark-ga-couchbase-spark-connector\/","og_site_name":"The Couchbase Blog","article_published_time":"2025-04-07T17:48:50+00:00","article_modified_time":"2025-07-08T16:15:31+00:00","og_image":[{"width":2560,"height":1340,"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png","type":"image\/png"}],"author":"Vishal Dhiman, Sr. Product Manager","twitter_card":"summary_large_image","twitter_misc":{"Written by":"Vishal Dhiman, Sr. Product Manager","Est. reading time":"12 minutos"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#article","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/"},"author":{"name":"Vishal Dhiman, Sr. Product Manager","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/853c7ac2867fb9e801ff769321364961"},"headline":"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark","datePublished":"2025-04-07T17:48:50+00:00","dateModified":"2025-07-08T16:15:31+00:00","mainEntityOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/"},"wordCount":2546,"commentCount":0,"publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png","keywords":["data engineering","PySpark"],"articleSection":["Best Practices and Tutorials","Columnar","Connectors","Couchbase Analytics","Couchbase Capella","Couchbase Server","Engineering","High Performance","Python","Scala","SQL++ \/ N1QL Query"],"inLanguage":"pt-BR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/","url":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/","name":"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark - The Couchbase Blog","isPartOf":{"@id":"https:\/\/www.couchbase.com\/blog\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage"},"thumbnailUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png","datePublished":"2025-04-07T17:48:50+00:00","dateModified":"2025-07-08T16:15:31+00:00","description":"O Couchbase Spark Connector agora oferece suporte ao PySpark! Crie pipelines de dados r\u00e1pidos e dimension\u00e1veis e aplicativos de ML com o Couchbase e o Apache Spark em Python.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#breadcrumb"},"inLanguage":"pt-BR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/"]}]},{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#primaryimage","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2025\/04\/Pyspark-1.png","width":2560,"height":1340,"caption":"Couchbase PySpark connector released"},{"@type":"BreadcrumbList","@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.couchbase.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Build Highly Scalable AI\/ML Applications With Couchbase and PySpark"}]},{"@type":"WebSite","@id":"https:\/\/www.couchbase.com\/blog\/#website","url":"https:\/\/www.couchbase.com\/blog\/","name":"Blog do Couchbase","description":"Couchbase, o banco de dados NoSQL","publisher":{"@id":"https:\/\/www.couchbase.com\/blog\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.couchbase.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"pt-BR"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"Blog do Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/2023\/04\/admin-logo.png","width":218,"height":34,"caption":"The Couchbase Blog"},"image":{"@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/853c7ac2867fb9e801ff769321364961","name":"Vishal Dhiman, gerente s\u00eanior de produtos Gerente de produtos","image":{"@type":"ImageObject","inLanguage":"pt-BR","@id":"https:\/\/www.couchbase.com\/blog\/#\/schema\/person\/image\/58e586f8e4645cc672ef6f140799b4b3","url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/09\/vishal-dhiman-couchbase.jpg","contentUrl":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/09\/vishal-dhiman-couchbase.jpg","caption":"Vishal Dhiman, Sr. Product Manager"},"url":"https:\/\/www.couchbase.com\/blog\/pt\/author\/vishald\/"}]}},"authors":[{"term_id":9987,"user_id":85357,"is_guest":0,"slug":"vishald","display_name":"Vishal Dhiman, Sr. Product Manager","avatar_url":{"url":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/09\/vishal-dhiman-couchbase.jpg","url2x":"https:\/\/www.couchbase.com\/blog\/wp-content\/uploads\/sites\/1\/2024\/09\/vishal-dhiman-couchbase.jpg"},"author_category":"","last_name":"Dhiman, Sr. Product Manager","first_name":"Vishal","job_title":"Sr. Product Manager","user_url":"","description":""}],"_links":{"self":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/17010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/users\/85357"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/comments?post=17010"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/posts\/17010\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media\/17013"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/media?parent=17010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/categories?post=17010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/tags?post=17010"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/pt\/wp-json\/wp\/v2\/ppma_author?post=17010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}