Klarety

Sesiones de Spark

Abra una sesión de Spark Connect en Nexus para trabajar con DataFrames, y ciérrela al terminar.

Para desarrolladores

Una sesión de le da toda la API de DataFrames de PySpark sobre sus tablas de , mediante Spark Connect. Úsela cuando una sentencia SQL no basta: explorar en un notebook, encadenar transformaciones o preparar un DataFrame para ingest_frame.

Para una sola consulta, nexus.sql() es más simple y más barato. Para scripts sin supervisión, use un trabajo.

Una sesión cobra desde que se abre

Una sesión sigue en marcha, y usando , hasta que se cierra o llega al tiempo máximo de su plan. spark.stop() solo cierra su lado de la conexión; cierre la sesión misma, como se muestra abajo.

Antes de empezar

  • Usted es administrador del . Una sesión lee el almacenamiento directamente, más allá del acceso a carpetas, así que cualquier otra persona recibe RefusedError.
  • Instale el extra de Spark. Fija la versión de PySpark que usa Nexus; otras versiones fallan de formas confusas.
pip install "klarety[spark]"
  • El espacio de trabajo tiene créditos para la sesión.

Elija un rol

Una sesión se abre con un rol:

RolQué puede hacer la sesión
read (por defecto)Leer tablas.
writeLeer tablas y cambiar sus filas.
ddlTodo lo de write, más crear y cambiar tablas.

Pida lo mínimo que necesite. Pedir un rol que su clave no tiene falla con AuthError (401).

Abra, use y cierre una sesión

Cerrar una sesión requiere su ID. nexus.spark() devuelve un SparkSession listo pero no el ID, así que esa sesión corre hasta el límite de su plan. Para cerrarla al terminar (el caso habitual), ábrala mediante la API, que devuelve el ID:

spark_session.py
import os

import httpx
from pyspark.sql import SparkSession

API = "https://api.klarety.ai"

token = httpx.post(
    f"{API}/v1/token", json={"api_key": os.environ["KLARETY_API_KEY"]}, timeout=30
).raise_for_status().json()["access_token"]
headers = {"Authorization": f"Bearer {token}"}

opened = httpx.post(
    f"{API}/v1/spark/session", json={"role": "read"}, headers=headers, timeout=360
).raise_for_status().json()

spark = SparkSession.builder.remote(opened["connect_url"]).getOrCreate()
try:
    orders = spark.table("orders")
    orders.groupBy("customer").count().orderBy("count", ascending=False).show(10)
finally:
    spark.stop()
    httpx.delete(
        f"{API}/v1/spark/session/{opened['session_id']}", headers=headers, timeout=30
    ).raise_for_status()
    print("Session closed")

El bloque finally cierra la sesión aunque su código falle. Abrirla puede tardar unos minutos, de ahí el tiempo de espera largo. La respuesta también trae expires_at, cuando la conexión deja de aceptarse.

El atajo del SDK

Para una mirada rápida en la que la sesión puede correr hasta el límite de su plan, el SDK la abre en una línea:

from klarety import KlaretyError, Nexus

with Nexus.connect() as nexus:
    try:
        spark = nexus.spark(role="read")
    except KlaretyError as refused:
        raise SystemExit(str(refused))
    spark.table("orders").show(5)

nexus.spark() se niega antes de abrir nada si falta PySpark ("install klarety[spark] to open a Spark session") o si su versión es distinta de la de Nexus, nombrando ambas versiones; reinstale con pip install "klarety[spark]".

Vea qué hace Spark

with Nexus.connect() as nexus:
    print(nexus.spark_status())  # off, starting, ready or busy
    print(nexus.spark_usage())   # your machine's CPUs and memory, and their use over the last hour

Cargue un DataFrame en una tabla

nexus.ingest_frame() escribe un DataFrame en una tabla de Nexus con la misma limpieza que una carga de archivo:

run = nexus.ingest_frame(summary_frame, table="customer_summary", key=["customer"])
print(run.run_id, run.state)

Con key, las filas existentes se actualizan en vez de agregarse dos veces. Siga la carga con nexus.ingest_status(run.run_id), como en Cargar datos.

Qué puede salir mal

ProblemaCausaSolución
RefusedError al abrirUsted no es administrador del espacio de trabajo.Pida a un administrador que la abra.
AuthError al abrirLa clave no tiene el rol que pidió.Pida read, o use una clave con más acceso.
InsufficientCreditsErrorEl espacio de trabajo no puede pagar una sesión.Agregue créditos.
install klarety[spark] to open a Spark sessionPySpark no está instalado.pip install "klarety[spark]".
Un mensaje que nombra dos versiones de PySparkSu versión de PySpark difiere de la de Nexus.Reinstale con pip install "klarety[spark]".
429 al abrirTodas las sesiones que permite su plan están en uso.Cierre una sesión que ya no necesite, o intente más tarde.
Los créditos siguen bajando después de terminarLa sesión no se cerró.Ciérrela con su session_id.

Próximos pasos

En esta página