{"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\/es\/pyspark-ga-couchbase-spark-connector\/","title":{"rendered":"Cree aplicaciones AI\/ML altamente escalables con Couchbase y PySpark"},"content":{"rendered":"<p>Nos complace anunciar la disponibilidad general (GA) de la compatibilidad de Python con <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/pyspark.html\" target=\"_blank\" rel=\"noopener\">Conector Spark de Couchbase<\/a>que aporta una integraci\u00f3n de primera clase entre Couchbase Server y <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener\">Apache Spark<\/a> a los ingenieros de datos de Python. Esta versi\u00f3n GA significa que el conector est\u00e1 listo para producci\u00f3n y totalmente soportado, permitiendo a las aplicaciones PySpark leer y escribir sin problemas en Couchbase. Con la base de datos NoSQL de alto rendimiento de Couchbase (con lenguaje de consulta SQL++\/SQL++) y el motor de procesamiento distribuido de Spark, los ingenieros de datos pueden ahora combinar f\u00e1cilmente estas tecnolog\u00edas para construir pipelines de datos y flujos de trabajo anal\u00edticos r\u00e1pidos y escalables. En resumen, el conector Spark de Couchbase para PySpark desbloquea la integraci\u00f3n de datos eficiente y paralela, lo que le permite aprovechar Spark para ETL\/ELT, an\u00e1lisis en tiempo real, aprendizaje autom\u00e1tico y mucho m\u00e1s en los datos almacenados en Couchbase.<\/p>\n<p>En este post, cubriremos c\u00f3mo empezar con el conector PySpark, demostraremos operaciones b\u00e1sicas de lectura\/escritura (tanto clave-valor como basadas en consultas) para bases de datos operacionales Couchbase y bases de datos Columnar Capella; y compartiremos consejos de ajuste de rendimiento para obtener el mejor rendimiento. Tanto si has estado utilizando el conector Spark de Couchbase en Scala, como si eres nuevo en la integraci\u00f3n Couchbase-Spark, esta gu\u00eda te ayudar\u00e1 a utilizar r\u00e1pidamente PySpark para tus necesidades de ingenier\u00eda de datos.<\/p>\n<h2>\u00bfPor qu\u00e9 PySpark?<\/h2>\n<p>La incorporaci\u00f3n de PySpark al conector Spark de Couchbase se debe a la creciente demanda de ingenieros de datos y desarrolladores que prefieren Python por su sencillez y el ecosistema masivo de Python ML para Spark en los flujos de trabajo de ingenier\u00eda y ciencia de datos. Este soporte garantiza que los equipos que ya utilizan Python puedan ahora integrar Couchbase (tanto si utiliza <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">base de datos operativa autogestionada<\/a> o <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/analytics\/\" target=\"_blank\" rel=\"noopener\">Capella Columnar<\/a> ) en flujos de trabajo Spark basados en Python, lo que permite una adopci\u00f3n m\u00e1s amplia y procesos de datos racionalizados.<\/p>\n<p>El dominio de Python en los casos de uso de IA\/ML, respaldado por marcos como SparkML, PyTorch, TensorFlow, H2O, DataRobot, scikit-learn y SageMaker, as\u00ed como herramientas populares de an\u00e1lisis exploratorio de datos como Matplotlib y Plotly, subraya a\u00fan m\u00e1s la necesidad de integraci\u00f3n de PySpark. Adem\u00e1s, la compatibilidad con PySpark permite acelerar los procesos ETL y ML aprovechando la aceleraci\u00f3n de la GPU (Spark RAPIDS) y facilita sofisticadas tareas de ingenier\u00eda de caracter\u00edsticas y manipulaci\u00f3n de datos utilizando bibliotecas ampliamente adoptadas como Pandas, NumPy y las API de ingenier\u00eda de caracter\u00edsticas integradas en Spark. Este nuevo soporte agiliza significativamente los procesos de datos y ampl\u00eda las oportunidades de adopci\u00f3n de Couchbase en equipos de ingenier\u00eda y ciencia de datos.<\/p>\n<h2>Primeros pasos con Couchbase PySpark<\/h2>\n<p>Empezar es muy sencillo. El conector Spark de Couchbase se distribuye como un \u00fanico archivo JAR (Java archive) que puedes a\u00f1adir a tu entorno Spark. Puedes obtener el conector en la p\u00e1gina oficial <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/download-links.html\" target=\"_blank\" rel=\"noopener\">Sitio de descarga de Couchbase<\/a> o a trav\u00e9s de <a href=\"https:\/\/mvnrepository.com\/artifact\/com.couchbase.client\/spark-connector\" target=\"_blank\" rel=\"noopener\">Coordenadas Maven<\/a>. Una vez que tengas el JAR, usarlo en PySpark es tan sencillo como configurar tu sesi\u00f3n Spark con la configuraci\u00f3n del conector y la conexi\u00f3n a Couchbase.<\/p>\n<p><b>1. Obtener o crear una base de datos operativa Couchbase o una base de datos Columnar Capella.<\/b><\/p>\n<p>La forma m\u00e1s r\u00e1pida de empezar con Couchbase es utilizar nuestra aplicaci\u00f3n <a href=\"https:\/\/cloud.couchbase.com\/sign-in\" target=\"_blank\" rel=\"noopener\">Capella DBaaS<\/a>. Una vez all\u00ed, puede buscar su base de datos existente o crear una <a href=\"https:\/\/docs.couchbase.com\/cloud\/clusters\/databases.html\" target=\"_blank\" rel=\"noopener\">operativo<\/a> o <a href=\"https:\/\/docs.couchbase.com\/columnar\/admin\/prepare-project.html\" target=\"_blank\" rel=\"noopener\">columnar<\/a> (para an\u00e1lisis). Tambi\u00e9n puede utilizar nuestra <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">Couchbase autogestionado<\/a>.<\/p>\n<p><b>2. Instale PySpark (si no lo est\u00e1 ya)<\/b><\/p>\n<p>Si est\u00e1s trabajando en un entorno Python, instala PySpark usando pip. Por ejemplo, en un entorno virtual:<\/p>\n<pre class=\"nums:false lang:default decode:true\">pip install pyspark<\/pre>\n<p>Esto instalar\u00e1 Apache Spark para su uso con Python. Si est\u00e1 ejecutando en un cl\u00faster Spark o Databricks existente, es posible que PySpark ya est\u00e9 disponible.<\/p>\n<p><b>3. Incluye el JAR del conector Spark de Couchbase<\/b><\/p>\n<p><a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/download-links.html#using-from-pyspark\" target=\"_blank\" rel=\"noopener\">Descargar<\/a> el <code>spark-connector-assembly-.jar<\/code> para la \u00faltima versi\u00f3n del conector. Entonces, cuando crees tu sesi\u00f3n Spark o env\u00edes tu trabajo, proporciona este JAR en la configuraci\u00f3n. Puedes hacerlo estableciendo el par\u00e1metro <code>--jarras<\/code> opci\u00f3n en <code>spark-submit<\/code> o a trav\u00e9s del constructor SparkSession en c\u00f3digo (como se muestra a continuaci\u00f3n).<\/p>\n<p><b>4. Configurar la conexi\u00f3n Couchbase<\/b><\/p>\n<p>Es necesario especificar la cadena de conexi\u00f3n del cl\u00faster Couchbase y las credenciales (nombre de usuario y contrase\u00f1a). En Capella, puede encontrar esto en la pesta\u00f1a \"Conectar\" para las aplicaciones operativas y de gesti\u00f3n. <strong>Configuraci\u00f3n-&gt;Cadena de conexi\u00f3n<\/strong> para columnar. Opcionalmente, especifique un cubo o \u00e1mbito por defecto si es necesario (aunque tambi\u00e9n puede especificar cubo\/\u00e1mbito por operaci\u00f3n).<\/p>\n<p>A continuaci\u00f3n <b>ejemplo r\u00e1pido de PySpark<\/b> que establece un <code>SparkSession<\/code> para conectarse a un cl\u00faster Couchbase y luego lee algunos datos:<\/p>\n<pre class=\"nums:false lang:default decode:true\">from pyspark.sql import SparkSession\r\n# Inicializar SparkSession con conector Couchbase y configuraci\u00f3n de la conexi\u00f3n\r\n\r\nspark = SparkSession.builder \\\r\n    .appName(\"CouchbaseIntegrationExample\") \\\r\n    .master(\"local[*]\") \\ # usando Spark local por ejemplo; omitir o ajustar para cluster Spark\r\n    .config(\"spark.jars\", \"\/ruta\/a\/spark-conector-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# Prueba la conexi\u00f3n leyendo algunos documentos de Couchbase (usando un bucket de ejemplo)\r\ndf = spark.read.format(\"couchbase.query\") \\\r\n    .option(\"bucket\", \"bucket_name\") \\\r\n    .option(\"scope\", \"scope_name\") \\\r\n    .option(\"colecci\u00f3n\", \"nombre_colecci\u00f3n\") \\\r\n    .load()\r\n\r\ndf.printEsquema()\r\ndf.show(5)<\/pre>\n<p>En el c\u00f3digo anterior, configuramos la sesi\u00f3n de Spark para incluir el conector JAR de Couchbase y apuntarlo a un cluster de Couchbase. A continuaci\u00f3n creamos un DataFrame <code>df<\/code> leyendo del <code>nombre_cubo<\/code> cubo (concretamente el s<code>cope_name.collection_name<\/code> ) a trav\u00e9s del servicio de consulta.<\/p>\n<p>Para el resto de este documento, supondremos que ha cargado nuestro conjunto de datos de muestra <a href=\"https:\/\/docs.couchbase.com\/scala-sdk\/current\/ref\/travel-app-data-model.html\" target=\"_blank\" rel=\"noopener\">viaje-muestra <\/a>que se puede hacer para Couchbase <a href=\"https:\/\/docs.couchbase.com\/cloud\/get-started\/run-first-queries.html\" target=\"_blank\" rel=\"noopener\">Capella operativa<\/a> o <a href=\"https:\/\/docs.couchbase.com\/columnar\/intro\/examples.html#travel-sample\" target=\"_blank\" rel=\"noopener\">Columnar<\/a> muy f\u00e1cilmente.<\/p>\n<h2>Lectura\/escritura en Couchbase usando PySpark<\/h2>\n<p>Una vez que tu sesi\u00f3n de Spark est\u00e1 conectada a Couchbase, puedes realizar ambas operaciones <b>operaciones clave-valor<\/b> (para escrituras) y <b>operaciones de consulta<\/b> (utilizando SQL++ tanto para lectura como para escritura) a trav\u00e9s de DataFrames.<\/p>\n<p>La siguiente tabla muestra el formato que soporta el conector Sparks para leer y escribir en Couchbase y bases de datos columnares:<\/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>Base de datos operativa Couchbase\/Capella<\/b><\/td>\n<td style=\"border: 1px solid Gainsboro;\"><b>Capella Base de datos columnar<\/b><\/td>\n<\/tr>\n<tr style=\"border: 1px solid Gainsboro;\">\n<td style=\"border: 1px solid Gainsboro; background-color: white;\">Leer las operaciones<\/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;\">Operaciones de escritura<\/td>\n<td style=\"border: 1px solid Gainsboro;\">(se recomienda utilizar el Servicio de Datos)<\/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>Lectura desde Couchbase con un DataFrame de consulta<\/h3>\n<p>El conector Spark de Couchbase te permite cargar datos desde un bucket de Couchbase como un Spark DataFrame a trav\u00e9s de consultas SQL++. Uso del lector DataFrame con formato <code>couchbase.query<\/code>puede especificar un bucket (y \u00e1mbito\/colecci\u00f3n) y par\u00e1metros de consulta opcionales. Por ejemplo, para leer todos los documentos de una colecci\u00f3n o un subconjunto definido por un filtro:<\/p>\n<pre class=\"nums:false lang:default decode:true\"># Leer todos los documentos de una colecci\u00f3n Couchbase utilizando el servicio Query\r\nairlines_df = spark.read.format(\"couchbase.query\") \\\r\n    .option(\"bucket\", \"muestra-viaje\") \\\r\n    .option(\"scope\", \"inventory\") \\\r\n    .option(\"collection\", \"airline\") \\\r\n    .load()\r\n\r\n# Ejemplo: filtrar el DataFrame usando Spark (se enviar\u00e1 a Couchbase cuando sea posible)\r\nusa_airlines_df = airlines_df.filter(\"pais = 'Estados Unidos'\")\r\nusa_airlines_df.show(5)<\/pre>\n<p>En este ejemplo, <code>aerol\u00edneas_df<\/code> carga todos los documentos del <code>viajes-muestra.inventario.aerolinea<\/code> en un Spark DataFrame. A continuaci\u00f3n, aplicamos un filtro para encontrar las aerol\u00edneas con sede en Estados Unidos. El conector intentar\u00e1 <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#aggregate-push-down\" target=\"_blank\" rel=\"noopener\">empujar hacia abajo<\/a> a Couchbase para que no se transfieran datos innecesarios (es decir, incluir\u00e1 los filtros <code>WHERE pa\u00eds = \"Estados Unidos<\/code> en la consulta SQL++ que ejecuta, si es posible). El resultado, <code>usa_airlines_df<\/code>se puede utilizar como cualquier otro DataFrame en Spark (por ejemplo, se puede unir con otros DataFrames, aplicar agregaciones, etc.).<\/p>\n<p>Bajo el cap\u00f3, el <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_partitioning\" target=\"_blank\" rel=\"noopener\">tabiques conectores<\/a> los resultados de la consulta en varias tareas si se ha configurado (m\u00e1s informaci\u00f3n al respecto en <i>Ajuste del rendimiento<\/i> m\u00e1s abajo), y utiliza el servicio de consultas de Couchbase (impulsado por el motor SQL++) para recuperar los datos. Cada partici\u00f3n de Spark corresponde a un subconjunto de datos recuperados por una consulta SQL++ equivalente. Esto permite lecturas paralelas desde Couchbase, aprovechando la naturaleza distribuida tanto de Spark como de Couchbase.<\/p>\n<h3>Escritura en Couchbase con operaciones clave-valor (KV) (recomendado)<\/h3>\n<p>El conector tambi\u00e9n admite la escritura de datos en Couchbase, ya sea a trav\u00e9s de la aplicaci\u00f3n <b>Servicio de datos (KV)<\/b> o a trav\u00e9s del servicio Query (ejecuci\u00f3n de SQL++ <code>INSERTAR\/UPSERTAR<\/code> comandos para usted). En <b>recomendado<\/b> para la mayor\u00eda de los casos de uso es utilizar el <b>Fuente de datos clave-valor<\/b> (<code>format(\"couchbase.kv\")<\/code>) para <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_persistence\" target=\"_blank\" rel=\"noopener\">mejor rendimiento<\/a>. En el modo clave-valor, cada tarea Spark escribir\u00e1 documentos directamente en los nodos de datos de Couchbase.<\/p>\n<p>Al escribir un DataFrame en Couchbase, debes asegurarte de que existe un ID \u00fanico para cada documento (ya que Couchbase requiere un ID de documento). Por defecto, el conector busca una columna llamada <code>__META_ID<\/code> (o <code>META_ID<\/code> en versiones m\u00e1s recientes) en el DataFrame para el ID del documento. Tambi\u00e9n puede especificar un campo ID personalizado a trav\u00e9s de la opci\u00f3n <code>IdFieldName<\/code> opci\u00f3n.<\/p>\n<p>Por ejemplo, supongamos que tenemos un Spark DataFrame <code>nuevas_lineas_aereas_df<\/code> que queremos escribir en Couchbase. Tiene una columna <code>airline_id<\/code> que debe servir como clave del documento de Couchbase, y el resto de columnas son el contenido del documento:<\/p>\n<pre class=\"nums:false lang:default decode:true\"># Supongamos que new_airlines_df es un DataFrame que queremos escribir en Couchbase\r\n# Contiene una columna \"airline_id\" para usarla como ID del documento.\r\nnew_airlines_df.write.format(\"couchbase.kv\") \\\r\n    .option(\"bucket\", \"mybucket\") \\\r\n    .option(\"scope\", \"myscope\") \\\r\n    .option(\"collection\", \"airlines\") \\\r\n    .option(\"idFieldName\", \"airline_id\") \\\r\n    .save()<\/pre>\n<h3>Escribir en Couchbase con operaciones de consulta (SQL++)<\/h3>\n<p>Aunque recomendamos utilizar el servicio de datos (KV) como se ha indicado anteriormente, ya que suele ser m\u00e1s r\u00e1pido que el servicio de consulta, si lo prefiere, tambi\u00e9n puede escribir a trav\u00e9s del servicio de consulta utilizando <code>format(\"couchbase.query\")<\/code> en escritura. Esto ejecutar\u00e1 internamente sentencias UPSERT de SQL++ para cada fila. Esto puede ser \u00fatil si necesita aprovechar una caracter\u00edstica de SQL++ (por ejemplo, transformaciones del lado del servidor), pero para inserciones\/actualizaciones directas, el enfoque KV es m\u00e1s eficiente.<\/p>\n<pre class=\"nums:false lang:default decode:true\">df.write.format(\"couchbase.query\") \\\r\n    .option(\"bucket\", \"mybucket\") \\\r\n    .option(\"scope\", \"myscope\") \\\r\n    .option(\"collection\", \"airlines\") \\\r\n    .mode(\"sobrescribir\") \\\r\n    .save()<\/pre>\n<p>En la siguiente secci\u00f3n, vamos a modificar estos casos b\u00e1sicos de lectura\/escritura para el \u00faltimo producto anal\u00edtico de Couchbase - Capella Columnar.<\/p>\n<h2>Compatibilidad de PySpark con Capella Columnar<\/h2>\n<p>Una de las principales novedades de Couchbase Spark Connector GA es el soporte de Capella Columnar. Capella Columnar es un servicio de base de datos anal\u00edtica nativa JSON en Couchbase Capella que almacena datos en un formato orientado a columnas para anal\u00edtica de alto rendimiento.<\/p>\n<h3>Lectura de datos en formato columnar con PySpark<\/h3>\n<p>La lectura de datos de un cluster Couchbase Capella Columnar en PySpark es similar al cluster operacional couchbase excepto por tres cambios:<\/p>\n<ol>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Utiliza el <code>format(\"couchbase.columnar\")<\/code> para especificar que la conexi\u00f3n es para servicio en columna.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">La cadena de conexi\u00f3n para columnar puede recuperarse desde Capella UI.<\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\">Tambi\u00e9n puede especificar el conjunto de datos que desea cargar proporcionando como opciones los nombres de la base de datos, el \u00e1mbito y la colecci\u00f3n (de forma an\u00e1loga a bucket\/scope\/collection en Couchbase)<\/li>\n<\/ol>\n<p>Una vez configurado Spark, puede utilizar la API del lector Spark DataFrame para cargar datos del servicio columnar:<\/p>\n<pre class=\"nums:false lang:default decode:true\">from pyspark.sql import SparkSession\r\n# Inicializar SparkSession con la configuraci\u00f3n de Couchbase (suponiendo que el conector est\u00e9 disponible)\r\nspark = SparkSession.builder \\\r\n    .appName(\"Couchbase Spark Connector Columnar Example\") \\\r\n    .config(\"spark.couchbase.connectionString\", \"couchbases:\/\/su.columnar.connection.string\") \\\r\n    .config(\"spark.couchbase.username\", \"YourColumnarUsername\") \\\r\n    .config(\"spark.couchbase.password\", \"YourColumnarPassword\") \\\r\n    .getOrCreate()\r\n\r\n# Leer un DataFrame de Couchbase Capella Columnar (travel-sample.inventory.airline collection)\r\nairlines_df = spark.read.format(\"couchbase.columnar\") \\\r\n    .option(\"database\", \"travel-sample\") \\\r\n    .option(\"\u00e1mbito\", \"inventario\") \\\r\n    .option(\"collection\", \"airline\") \\\r\n    .load()<\/pre>\n<p>En este ejemplo, el resultado <code>aerol\u00edneas_df<\/code> es un DataFrame de Spark normal - puedes inspeccionarlo, ejecutar transformaciones y realizar acciones como <code>.count()<\/code> o <code>.mostrar()<\/code> como de costumbre. Por ejemplo, <code>airlines_df.show(5)<\/code> imprimir\u00e1 algunos documentos de la aerol\u00ednea, y <code>airlines_df.count()<\/code> devolver\u00e1 el n\u00famero de documentos de la colecci\u00f3n. Bajo el cap\u00f3, el conector infiere autom\u00e1ticamente un esquema para los documentos JSON muestreando hasta un cierto n\u00famero de registros (por defecto 1000). Todos los campos que aparecen de forma consistente en los documentos muestreados se convierten en columnas en el DataFrame, con los tipos de datos Spark apropiados.<\/p>\n<p>Tenga en cuenta que si sus documentos tienen esquemas variables, la inferencia puede producir un esquema que incluya la uni\u00f3n de todos los campos (los campos no presentes en algunos documentos ser\u00e1n nulos en esas filas). En los casos en los que el esquema evoluciona o en los que desea restringir los registros que se tienen en cuenta, puede proporcionar un filtro expl\u00edcito (predicado) al lector, como se describe a continuaci\u00f3n.<\/p>\n<h3>Consulta de un conjunto de datos columnares en Couchbase a trav\u00e9s de Spark<\/h3>\n<p>A menudo puede que no desee cargar una colecci\u00f3n completa, especialmente si es grande. Puede optimizar el rendimiento enviando predicados de filtro directamente al servicio Columnar de Capella al cargar los datos, evitando la transferencia innecesaria de datos. Utilice <code>.option(\"filtro\", \"\")<\/code> para aplicar una cl\u00e1usula WHERE de SQL++ durante la operaci\u00f3n de lectura. Por ejemplo, para cargar solo las aerol\u00edneas con sede en 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    .option(\"collection\", \"airline\") \\\r\n    .option(\"filter\", \"country = 'United States'\") \\\r\n    .load()\r\n\r\nprint(usa_airlines_df.count()) # S\u00f3lo aerol\u00edneas cuyo pa\u00eds = 'Estados Unidos'<\/pre>\n<p>El conector ejecuta este filtro directamente en la fuente, recuperando s\u00f3lo los documentos relevantes. Tambi\u00e9n puede realizar proyecciones (seleccionando campos espec\u00edficos) y agregaciones en algunos casos. <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#aggregate-push-down\" target=\"_blank\" rel=\"noopener\">agregados simples<\/a> como <code>CONTAR<\/code>, <code>MIN<\/code>, <code>MAX<\/code>y <code>SUM<\/code> al motor Columnar siempre que sea posible, en lugar de calcularlos en Spark, para mejorar el rendimiento.<\/p>\n<p>Una vez cargados los datos en un DataFrame, puede realizar las operaciones est\u00e1ndar de <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/columnar.html#spark-sql\" target=\"_blank\" rel=\"noopener\">Transformaciones Spark<\/a>y agregaciones. Por ejemplo, para contar las aerol\u00edneas por pa\u00eds utilizando Spark SQL, puede incluso crear una vista temporal para ejecutar consultas Spark SQL en los datos de la siguiente manera:<\/p>\n<pre class=\"nums:false lang:default decode:true\">airlines_df.createOrReplaceTempView(\"airlines_view\")\r\nresult_df = spark.sql(\"\"\r\n    SELECT pa\u00eds, COUNT(*) COMO recuento_l\u00edneas_a\u00e9reas\r\n    FROM airlines_view\r\n    GROUP BY pa\u00eds\r\n    ORDER BY recuento_l\u00edneas a\u00e9reas DESC\r\n\"\"\")\r\nresult_df.show(10)<\/pre>\n<p>Esta consulta se ejecuta \u00edntegramente en el motor Spark, lo que aporta flexibilidad para integrar los datos de Couchbase sin problemas en flujos de trabajo anal\u00edticos complejos.<\/p>\n<p>Habiendo cubierto las lecturas y escrituras b\u00e1sicas, pasemos a c\u00f3mo puedes ajustar el rendimiento al mover grandes vol\u00famenes de datos entre Couchbase y Spark.<\/p>\n<h2>Consejos para mejorar el rendimiento<\/h2>\n<p>Para maximizar el rendimiento y la eficiencia al utilizar el conector PySpark de Couchbase, ten en cuenta las siguientes pr\u00e1cticas recomendadas.<\/p>\n<h3>Ajuste de las operaciones de lectura<\/h3>\n<p><b>Utilizar el particionamiento de consultas para el paralelismo<\/b><br \/>\n(<a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">base de datos operativa autogestionada<\/a> o <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/analytics\/\" target=\"_blank\" rel=\"noopener\">Capella Columnar<\/a>)<\/p>\n<p>Cuando lea a trav\u00e9s del servicio de consulta para bases de datos operativas o columnares, aproveche la capacidad del conector para particionar los resultados de la consulta. Puede especificar una <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_partitioning\" target=\"_blank\" rel=\"noopener\">partitionCount<\/a> (y un campo de partici\u00f3n num\u00e9rico con l\u00edmites inferior\/superior) para la lectura del DataFrame. Una buena regla general es establecer <code>partitionCount<\/code> a <b>al menos el n\u00famero total de n\u00facleos de CPU del servicio de consulta<\/b> disponibles en tu cl\u00faster Couchbase. Esto asegura que Spark ejecutar\u00e1 m\u00faltiples consultas en paralelo, aprovechando todos los nodos de consulta. Por ejemplo, si el servicio de consultas de tu cluster Couchbase tiene 8 n\u00facleos en total, establece <code>partitionCount &gt;= 8<\/code> para que se emitan al menos 8 consultas SQL++ paralelas. Esto puede aumentar dr\u00e1sticamente el rendimiento de lectura mediante la utilizaci\u00f3n de todos los nodos de consulta simult\u00e1neamente. Tenga en cuenta que debe tener suficientes n\u00facleos en su cl\u00faster Spark para ejecutar tantas consultas paralelas.<\/p>\n<p><b>Aprovechar los \u00edndices de cobertura para mejorar la eficacia de las consultas<br \/>\n<\/b>(<a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">base de datos operativa autogestionada<\/a>)<b><br \/>\n<\/b><\/p>\n<p>Si utiliza consultas SQL++, intente realizar la consulta a trav\u00e9s de <a href=\"https:\/\/docs.couchbase.com\/server\/current\/n1ql\/n1ql-language-reference\/covering-indexes.html\" target=\"_blank\" rel=\"noopener\">\u00edndices de cobertura<\/a> siempre que sea posible. Un \u00edndice de cobertura es un \u00edndice que incluye <i>todos<\/i> que necesita la consulta, de modo que \u00e9sta pueda realizarse \u00edntegramente a partir del \u00edndice sin tener que recurrir al servicio de datos. Las consultas cubiertas evitan el salto de red adicional para obtener documentos completos, por lo que <b>mejores resultados<\/b>. Dise\u00f1e sus \u00edndices secundarios de Couchbase para incluir los campos sobre los que filtra <i>y<\/i> los campos que devuelve, si es factible. Esto podr\u00eda significar la creaci\u00f3n de \u00edndices espec\u00edficos para tus trabajos Spark que cubran exactamente los datos necesarios.<\/p>\n<p><b>Garantizar r\u00e9plicas de \u00edndices para evitar cuellos de botella<br \/>\n<\/b>(<a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">base de datos operativa autogestionada<\/a>)<\/p>\n<p>Adem\u00e1s de utilizar \u00edndices de cobertura, aseg\u00farese de que sus \u00edndices est\u00e1n replicados en varios nodos de \u00edndice. <a href=\"https:\/\/docs.couchbase.com\/server\/current\/learn\/services-and-indexes\/indexes\/index-replication.html#index-replication\" target=\"_blank\" rel=\"noopener\">Replicaci\u00f3n de \u00edndices<\/a> no s\u00f3lo proporciona alta disponibilidad, sino que tambi\u00e9n permite que las consultas sean <b>carga equilibrada entre copias de \u00edndices en diferentes nodos para un mayor rendimiento<\/b>. En la pr\u00e1ctica, si tienes (por ejemplo) 3 nodos de \u00edndice, replicar \u00edndices importantes entre ellos significa que las consultas paralelas del conector Spark pueden golpear diferentes nodos de \u00edndice en lugar de golpear todos un solo nodo.<\/p>\n<h3>Ajuste de las operaciones de escritura<\/h3>\n<p><b>Prefiera el servicio Datos para escrituras masivas<\/b><br \/>\n(<a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">base de datos operativa autogestionada<\/a>)<\/p>\n<p>Recomendamos utilizar la fuente de datos clave-valor (<a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/spark-sql.html#_dataframe_persistence\" target=\"_blank\" rel=\"noopener\">Servicio de datos<\/a>) en lugar del servicio de consulta para las operaciones de escritura. La escritura a trav\u00e9s del servicio Data (KV upserts directos) suele ser <b>varias veces m\u00e1s r\u00e1pido<\/b> que las inserciones basadas en SQL++. De hecho, las pruebas comparativas internas han demostrado que escribir a trav\u00e9s de KV puede rondar el <i>3 veces m\u00e1s r\u00e1pido<\/i> que utilizando SQL++ en los trabajos de Spark. Esto se debe a que el servicio de datos puede ingerir documentos en paralelo directamente en los nodos responsables, con una latencia menor por operaci\u00f3n. Ten en cuenta que los \u00edndices se actualizan por separado, si es necesario, para esos nuevos documentos, ya que las escrituras KV no activar\u00e1n autom\u00e1ticamente actualizaciones de \u00edndices m\u00e1s all\u00e1 del \u00edndice primario.<\/p>\n<p><b>Aumentar las particiones de escritura para las escrituras del servicio de consulta<\/b><br \/>\n(<a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/capella\/\" target=\"_blank\" rel=\"noopener\">Couchbase Capella (DBaaS)<\/a>, <a href=\"https:\/\/www.couchbase.com\/blog\/es\/products\/server\/\" target=\"_blank\" rel=\"noopener\">base de datos operativa autogestionada<\/a>)<\/p>\n<p>Aunque no es recomendable, si decide utilizar <code>couchbase.query<\/code> para escribir (por ejemplo, si se realizan transformaciones del lado del servidor mientras se escribe), optimiza el rendimiento utilizando un n\u00famero elevado de particiones de escritura. Puedes reparticionar tu DataFrame antes de escribir para que Spark ejecute muchas tareas de escritura concurrentes. Una pauta aproximada es utilizar del orden de <b>cientos de particiones<\/b> para escrituras a gran escala mediante SQL++. Por ejemplo, utilizando <i>128 particiones por nodo de consulta CPU<\/i> es un punto de partida que algunos usuarios han encontrado efectivo. Esto significa que si tiene 8 n\u00facleos de consulta, pruebe con ~1024 particiones. La idea es inundar el servicio de consulta con suficientes sentencias UPSERT paralelas para maximizar el rendimiento. Ten cuidado y encuentra el equilibrio adecuado para tu cluster - una concurrencia demasiado alta podr\u00eda sobrecargar el servicio de consultas. Monitoriza el rendimiento de consultas de Couchbase y aj\u00fastalo en consecuencia.<\/p>\n<p>Siguiendo estos consejos de ajuste - alineando los recuentos de particiones con los recursos del cl\u00faster, indexando inteligentemente y eligiendo el servicio adecuado para el trabajo - puedes lograr un rendimiento \u00f3ptimo para la integraci\u00f3n Couchbase-Spark. No pierdas de vista las m\u00e9tricas de trabajo de Spark y las estad\u00edsticas de rendimiento de Couchbase (disponibles en la interfaz de usuario y los registros de Couchbase) para identificar cualquier cuello de botella (por ejemplo, si un nodo de consulta est\u00e1 haciendo todo el trabajo, o si la red est\u00e1 saturada) y ajusta la configuraci\u00f3n seg\u00fan sea necesario.<\/p>\n<h2>Comunidad y apoyo<\/h2>\n<p>El soporte de Couchbase PySpark se basa en Couchbase Spark Connector para Couchbase y <a href=\"https:\/\/github.com\/couchbase\/couchbase-spark-connector\" target=\"_blank\" rel=\"noopener\">es de c\u00f3digo abierto<\/a>y le animamos a que contribuya, nos haga llegar sus comentarios y se una a la conversaci\u00f3n. <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/pyspark.html\" target=\"_blank\" rel=\"noopener\">documentaci\u00f3n<\/a>\u00fanete al <a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/\" target=\"_blank\" rel=\"noopener\">Foros de Couchbase<\/a> o <a href=\"https:\/\/discord.com\/invite\/K7NPMPGrPk\" target=\"_blank\" rel=\"noopener\">Couchbase Discord<\/a>.<\/p>\n<h2>Para saber m\u00e1s<\/h2>\n<p>Para m\u00e1s informaci\u00f3n y documentaci\u00f3n detallada, consulte la p\u00e1gina oficial <a href=\"https:\/\/docs.couchbase.com\/spark-connector\/current\/index.html\" target=\"_blank\" rel=\"noopener\">Documentaci\u00f3n de Couchbase Spark Connector<\/a> y la secci\u00f3n correspondiente 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\">Documentaci\u00f3n de Couchbase PySpark<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/github.com\/couchbase\/couchbase-spark-connector\" target=\"_blank\" rel=\"noopener\">Repositorio GitHub del conector Spark de Couchbase<\/a><\/li>\n<li style=\"font-weight: 400;\" aria-level=\"1\"><a href=\"https:\/\/www.couchbase.com\/blog\/es\/forums\/tag\/spark\/\" target=\"_blank\" rel=\"noopener\">Foros de Couchbase (secci\u00f3n Spark Connector)<\/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\">Conector PySpark de Couchbase Ejemplo de Jupyter Notebook<\/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 Ejemplo Jupyter Notebook: Cancelaciones de hotel<\/a><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u00a1Feliz codificaci\u00f3n!<\/p>\n<p>El equipo de 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 v25.9 (Yoast SEO v25.9) - 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\/es\/pyspark-ga-couchbase-spark-connector\/\" \/>\n<meta property=\"og:locale\" content=\"es_MX\" \/>\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\/es\/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\":\"es\",\"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\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.couchbase.com\/blog\/#organization\",\"name\":\"The Couchbase Blog\",\"url\":\"https:\/\/www.couchbase.com\/blog\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@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\":\"es\",\"@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\/es\/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":"\u00a1Couchbase Spark Connector ahora soporta PySpark! Construye pipelines de datos y aplicaciones ML r\u00e1pidas y escalables con Couchbase y Apache Spark en 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\/es\/pyspark-ga-couchbase-spark-connector\/","og_locale":"es_MX","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\/es\/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":"es","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":"\u00a1Couchbase Spark Connector ahora soporta PySpark! Construye pipelines de datos y aplicaciones ML r\u00e1pidas y escalables con Couchbase y Apache Spark en Python.","breadcrumb":{"@id":"https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.couchbase.com\/blog\/pyspark-ga-couchbase-spark-connector\/"]}]},{"@type":"ImageObject","inLanguage":"es","@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":"El blog de Couchbase","description":"Couchbase, la base de datos 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":"es"},{"@type":"Organization","@id":"https:\/\/www.couchbase.com\/blog\/#organization","name":"El blog de Couchbase","url":"https:\/\/www.couchbase.com\/blog\/","logo":{"@type":"ImageObject","inLanguage":"es","@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, Director Director de Producto","image":{"@type":"ImageObject","inLanguage":"es","@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\/es\/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\/es\/wp-json\/wp\/v2\/posts\/17010","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/users\/85357"}],"replies":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/comments?post=17010"}],"version-history":[{"count":0,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/posts\/17010\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media\/17013"}],"wp:attachment":[{"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/media?parent=17010"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/categories?post=17010"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/tags?post=17010"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.couchbase.com\/blog\/es\/wp-json\/wp\/v2\/ppma_author?post=17010"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}