Herramienta open-source para auditar despilfarros financieros en clústeres PySpark (AWS Glue) y manipular S3.
Project description
🛸 Antigravity PySpark Framework
Enterprise framework para resolver problemas complejos de Big Data en AWS Glue y entornos PySpark puros sin esfuerzo. Este proyecto estandariza las mejores prácticas de la industria con un solo import.
📦 Empaquetado y Licenciamiento Comercial (SaaS B2B)
Si deseas vender y distribuir este framework a una empresa externa, es imperativo proteger tu Propiedad Intelectual (ofuscar el código fuente) y venderlo con una licencia temporal (para que te paguen la renovación).
1. Ofuscar el código y armar la "Bomba de Tiempo" (Expiración)
Antes de construir el paquete, encripta el código fuente y configúrale la fecha de vencimiento exacta del contrato del cliente (ej. 31 de Diciembre de 2027):
# 1. Asegúrate de estar en el entorno virtual
source .venv/bin/activate
# 2. Generar el binario comercial ofuscado (.whl) con Bomba de Tiempo (2027)
python build_commercial.py
Este script (que te escribí a la medida) automatizará por ti la encriptación con PyArmor y el empaquetado directo hacia la carpeta dist/. Cualquier ingeniero externo que intente abrir tus archivos allí dentro verá código basura indescifrable.
2. Construcción de uso interno / Open-Source (.whl)
Para el empaquetado inicial (sin ofuscación) para probar el framework dentro de tu propio AWS Glue, ejecuta el empaquetado estándar de Python:
# Construye el antigravity-0.1.0-py3-none-any.whl en la carpeta dist/
pip install build
python -m build
🚀 Guía de Uso Rápido para Ingenieros
Motor A: Optimizador Core (DataFrameChunker)
¿Cuándo usarlo? Cuando lidias con DataFrames anchos (Wide DataFrames) o realizas analítica que provoca errores de OutOfMemory (OOM), demoras extremas, o fallos de StackOverflowError. Funciona fluidamente con cualquier volumen de datos y columnas, auto-regulando la memoria del clúster para acelerar los cruces matemáticos pesados.
¿Cómo funciona?
Particiona el DataFrame verticalmente e inyecta localCheckpoint() para aislar la memoria del Catalyst Optimizer.
from antigravity.core import DataFrameChunker
# 1. Instancias el chunker indicando la llave primaria y cuántas columnas procesar a la vez.
chunker = DataFrameChunker(df_masivo, id_cols=["id_cliente"], chunk_size=50)
# 2. Defines tú lógica matemática. Spark solo le pasará 50 variables por iteración.
def mi_logica(chunk_df, indice):
# Calcula algo y retorna un DF más pequeño
return chunk_df.select("id_cliente", ...)
# 3. El framework ejecuta el bucle de forma segura en el clúster
resultados_parciales = chunker.process_chunks(mi_logica)
Motor B: Generador Legacy (LegacyTextTransformer)
¿Cuándo usarlo? Cuando el negocio, banco, o gobierno te exige generar archivos .TXT planos, asimétricos o posicionales a partir de datos tabulares modernos.
¿Cómo funciona?
Recibe el DataFrame y usa RDD.flatMap para aplicar lógica de python puro distribuidamente.
from antigravity.legacy import LegacyTextTransformer
# 1. Escribes las reglas del negocio (1 Fila de Spark = N líneas de texto)
def reglas_bancarias(fila):
yield f"HEADER_{fila.id}"
yield f"BODY_{fila.saldo}"
# 2. Invocas el framework
transformer = LegacyTextTransformer(df)
# 3. Generas la salida
transformer.save_as_text(reglas_bancarias, "s3://mi-bucket/banco_txt/")
Motor IO: Smart Exporter (S3Finalizer)
¿Cuándo usarlo? Cuando detestas que PySpark guarde tus archivos como part-0000X.csv y deje basura como los archivos _SUCCESS en tu S3.
¿Cómo funciona?
Se conecta mediante boto3 para listar, ordenar, secuenciar y renombrar la salida de Spark.
from antigravity.io import S3Finalizer
# 1. Escribes tu DataFrame normal en Spark
df.write.parquet("s3://mi-bucket/salida_sucia/")
# 2. Invocas el framework para secuenciarlos inteligentemente e inyectar el formato
finalizador = S3Finalizer(bucket_name="mi-bucket")
finalizador.sequence_spark_outputs(
s3_prefix="salida_sucia/",
pattern="MI_EMPRESA_DATA_{seq:04d}.parquet" # Resultado: MI_EMPRESA_DATA_0001.parquet
)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file antigravity_lite-0.1.1.tar.gz.
File metadata
- Download URL: antigravity_lite-0.1.1.tar.gz
- Upload date:
- Size: 10.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
97eef943281ddf6c49b69f903a03af490db43a8498c09c44de507bdfd49f0f5a
|
|
| MD5 |
f61e9a8aff5b17a5d3f0510beeec5dd0
|
|
| BLAKE2b-256 |
d9ce2ac505b53260c5cde1e196357ff73625442bfdc6060c4dd3d2797949cffc
|
Provenance
The following attestation bundles were made for antigravity_lite-0.1.1.tar.gz:
Publisher:
publish-lite.yml on andresvega925/AntigravityFW
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
antigravity_lite-0.1.1.tar.gz -
Subject digest:
97eef943281ddf6c49b69f903a03af490db43a8498c09c44de507bdfd49f0f5a - Sigstore transparency entry: 1203907293
- Sigstore integration time:
-
Permalink:
andresvega925/AntigravityFW@7b79b163700497c8c4c3934b84d906f3eacaada6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/andresvega925
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-lite.yml@7b79b163700497c8c4c3934b84d906f3eacaada6 -
Trigger Event:
workflow_dispatch
-
Statement type:
File details
Details for the file antigravity_lite-0.1.1-py3-none-any.whl.
File metadata
- Download URL: antigravity_lite-0.1.1-py3-none-any.whl
- Upload date:
- Size: 8.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f7fb94fb0b7b0e6700f223a85b035443ca3e2f8cf2254fd78aa29e55984551e
|
|
| MD5 |
2a4876267932628c639b8227dc6065e3
|
|
| BLAKE2b-256 |
c1a0d9e83ec28e6e563982acc73edae230712ec1db01837228aa42d07c4bb925
|
Provenance
The following attestation bundles were made for antigravity_lite-0.1.1-py3-none-any.whl:
Publisher:
publish-lite.yml on andresvega925/AntigravityFW
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
antigravity_lite-0.1.1-py3-none-any.whl -
Subject digest:
6f7fb94fb0b7b0e6700f223a85b035443ca3e2f8cf2254fd78aa29e55984551e - Sigstore transparency entry: 1203907303
- Sigstore integration time:
-
Permalink:
andresvega925/AntigravityFW@7b79b163700497c8c4c3934b84d906f3eacaada6 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/andresvega925
-
Access:
private
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-lite.yml@7b79b163700497c8c4c3934b84d906f3eacaada6 -
Trigger Event:
workflow_dispatch
-
Statement type: