Troubleshooting
After this page, you will know how to diagnose the most common bolt-pipeliner==0.2.6 failures. You will also know the fastest fix for each one.
ImportError: cannot import name 'AnalyzeArgument' from 'pyspark.sql.udtf'
This error means your Spark stack is out of sync with what Bolt expects.
In practice, this usually happens when your environment has an older pyspark installed.
Fix:
- Reinstall Bolt with Spark extras in a clean virtual environment.
- Verify the active
pysparkversion from that environment.
python -m venv .venv
source .venv/bin/activate
pip install --upgrade pip
pip install "bolt-pipeliner[spark]==0.2.6"
python -c "import pyspark; print(pyspark.__version__)"If you use a managed Spark platform, align local and remote Spark related package versions before running bolt run.
No jobs found for layer 'X', skipping...
You will see this warning during generation commands when a layer exists in layers: but has no valid jobs.
Common causes:
- The layer is declared under
layers:but its top level block is missing. - The layer block exists, but it is not a YAML list.
- The layer block uses a placeholder like
silver: ..., which loads as an empty list.
Fix the config so each layer has a real list of job dictionaries:
layers:
silver: etl/1_silver
silver:
- module: customer_features
input_tables:
base: bronze_customers
output_table_name: customer_featuresDocumentation pages show empty schema columns
bolt generate documentation can still render HTML when Spark is unavailable. In that fallback path, table columns are read from outputs/schema/schema.csv.
If schema.csv is missing, table pages render with empty schema sections.
Fix:
- Run
bolt generate documentationonce to emitoutputs/schema/schema.py. - Run
outputs/schema/schema.pyin a Spark environment. - Save the printed CSV as
outputs/schema/schema.csv. - Run
bolt generate documentationagain.
The CSV must include: table_name, col_name, data_type, comment.
You added a new layer and cannot run only that layer
bolt run has fixed shorthand flags for built in layers (--flatfile, --bronze, --silver, --gold, --diamond). A custom layer name does not get a new flag automatically.
Use --layer for custom layer names:
bolt run --layer mylayerIf that still skips your layer, check that:
mylayerexists underlayers:inconfigs/etl_config.yaml- A top level
mylayer:list exists with at least one job - Each job includes
module,input_tables, andoutput_table_name
