Convert DataStage parallel jobs to PySpark on Databricks

Transformer stages, Lookup stages, and job sequences parsed from DSX (.dsx) and ISX (.isx) exports. Converted to PySpark notebooks on Databricks with Delta Lake storage and Workflows orchestration. Full lineage, validated parity.

Upload a job, get converted code →
Why Databricks

DataStage's parallel engine has a natural successor

Parallel partitions map to Spark executors

DataStage parallel jobs already think in partitions, hash keys, and sort stages. PySpark on Databricks distributes the same logic across Spark executors with no manual repartitioning. What ran on one parallel engine now runs across a cluster.

Transformer logic becomes readable Python

Stage variables, derivations, and nested IF/THEN logic in Transformer stages become withColumn() calls with clear naming. No more reverse-engineering a Transformer expression buried inside a .dsx file.

Sequences become Databricks Workflows

DataStage Director sequences chain jobs with conditional logic, waits, and error handlers. Databricks Workflows handle the same DAG patterns with native retry, parameterized runs, and failure alerting built in.

Parser output

Transformer stage variables to PySpark columns

A Transformer stage with stage variables and derived outputs — converted to PySpark DataFrame operations on Databricks. Partition and sort logic preserved.

DataStage Transformer
-- Parallel Job: Customer_Risk_Score
-- Source: DB2_ACCOUNTS (DB2 connector)
-- Transformer stage:
--   sv_age = DateDiff(CurrentDate(),
--            lnk_acct.OPEN_DATE, "yy")
--   sv_balance = lnk_acct.BALANCE
--   out.RISK = If sv_age < 2 And
--     sv_balance > 50000 Then "HIGH"
--     Else If sv_age < 5 Then "MEDIUM"
--     Else "LOW"
-- Lookup: REGION_REF (reference link)
-- Target: RISK_SCORED (dataset)
MigryX
converts
PySpark on Databricks
# Transformer → PySpark on Databricks
from pyspark.sql import functions as F

df = spark.read.table("db2_accounts")
ref = spark.read.table("region_ref")

# Stage variables as columns
df = df.withColumn("sv_age",
    F.floor(F.datediff(
        F.current_date(), F.col("open_date")
    ) / 365))

df = df.join(F.broadcast(ref),
    df.region_id == ref.region_id, "left")

df = df.withColumn("risk",
    F.when((F.col("sv_age") < 2) &
           (F.col("balance") > 50000), "HIGH")
     .when(F.col("sv_age") < 5, "MEDIUM")
     .otherwise("LOW"))

df.write.format("delta").mode("overwrite") \
    .saveAsTable("risk_scored")

Stage variables become named columns. Lookup stages become broadcast joins. Derivations become withColumn() chains. Output writes to Delta Lake with ACID guarantees.

Coverage

DataStage to Databricks — artifact mapping

DataStage Component Databricks Equivalent Notes
Parallel JobDatabricks Notebook / JobRunnable PySpark notebook
Transformer stage.withColumn() chainsStage variables, derivations, conditionals
Lookup stagebroadcast joinReference link semantics preserved
Sort stage.orderBy()Sort keys and direction preserved
Aggregator stage.groupBy().agg()All aggregate functions mapped
Join stage.join() all typesInner, left, right, full outer
Filter / Funnel.filter() / .where()Predicate expressions preserved
Copy stageMulti-output writesFan-out to multiple Delta tables
Job SequenceDatabricks WorkflowDAG with conditional branching
Shared ContainerReusable notebook moduleParameterized, importable
DB2 / Oracle connectorspark.read.jdbc()JDBC sources preserved
Dataset / File stageDelta Lake tableACID writes, schema enforcement
Validation

Every conversion validated to row-level parity

Data Matching compares DataStage production output against Databricks output — row by row, column by column. Mismatches are flagged with column-level evidence before go-live.

See how Data Matching works →
Parser
DSX/ISX structural parse
+95%
Automated conversion rate
Delta
ACID-compliant output
DAG
Sequences to Workflows

DataStage to Databricks: validated conversion

Parallel jobs with Transformer stages, Lookup links, and nested sequences converted to PySpark notebooks on Databricks. Stage variables mapped to named columns. Job sequences converted to Databricks Workflows with conditional branching. All outputs validated with Data Matching before decommission.

Read the case study →

See it on your own DataStage jobs

Upload a DSX or ISX export. Get parsed lineage, PySpark code for Databricks, and a validation report.

Book a Live Demo → hello@migryx.com