技能创建器
skill-creator
创建、改进和评估自定义技能,把专业流程转化为可重复使用的 AI 能力。
matlab-connect-databricks【数据与研究】Connect MATLAB to Databricks via Spark (Databricks Connect) or JDBC (Database Toolbox). Use when setting up the MATLAB Interface for Databricks, configuring authentication (OauthU2M, OauthM2M, PAT), creating Spark sessions with getDatabricksSession(), reading Unity Catalog tables with server-side filtering, creating JDBC connections with databricks.J…
独立 GitHub 快照 · 自动分类 · 以原作者文档为准
Connect MATLAB to Databricks via Spark (Databricks Connect) or JDBC (Database Toolbox). This skill covers first-time setup, authentication, path selection, session/connection creation, and data operations through both paths.
.databrickscfg and authentication (OauthU2M, OauthM2M, PAT)getDatabricksSession)databricks.JDBCConnection, SQLWarehouse.connect())StandaloneJDBCConnection)sqlwrite)matlab-use-databasedatabricks.ODBCConnection)matlab-use-duckdbdatabricks-sdk Python workflows| Scenario | Path | Why |
|---|---|---|
| Large table (millions of rows), need server-side filtering before pulling locally | Spark | DataFrame operations run on cluster; only filtered results transfer |
| SQL queries on small-to-medium datasets | JDBC | Direct SQL via Database Toolbox; simpler setup |
| Need DataFrame transformations (withColumn, select, filter chains) | Spark | Native DataFrame API; operations stay on cluster |
| Writing large data with performance optimization | JDBC | Simba driver's UseNativeQuery optimizes sqlwrite |
| No MATLAB Interface for Databricks package installed | JDBC | StandaloneJDBCConnection works with just Database Toolbox + driver jar |
| Need to use Database Explorer app | JDBC | saveSource() + copyToken() integration |
| Reading files from Unity Catalog Volumes (CSV, Parquet, JSON) | Spark | spark.read.format().load() with Volumes paths |
Interactive exploration with sqlread/fetch | JDBC | Standard Database Toolbox workflow on j.Connection |
Default: Use Spark when the user mentions large data, server-side filtering, or DataFrames. Use JDBC when the user mentions SQL queries, Database Toolbox, or small/medium datasets. If unclear, ask the user about their data size and preferred workflow.
StandaloneJDBCConnection for JDBC-only without the package)setup from the package's Software/MATLAB directory. It configures settings, .databrickscfg, and installs the Databricks Connect library via pip into a venvstartup to add package paths (required once per MATLAB session)getDatabricksSession) or connection (databricks.JDBCConnection)table(spark.range(1)). JDBC: check j.Connection.Message is emptyclose(j). Spark: sessions are managed automatically| Function | Purpose |
|---|---|
getDatabricksSession() | Creates a Spark session (classic compute) |
getDatabricksSession(serverless=true) | Creates a serverless session (no cluster, 10-min timeout) |
spark.read().table("catalog.schema.table") | Reads a Unity Catalog table as a DataFrame |
spark.read.format(fmt).load(path) | Reads files from Volumes (csv, parquet, json) |
DF.filter(expr) | Server-side row filtering |
DF.select(cols) | Server-side column selection |
DF.limit(n) | Server-side row limiting |
DF.withColumn(name, col) | Adds/transforms a column (requires Column objects) |
table(DF) | Converts DataFrame to MATLAB table (pulls data locally) |
matlab.sparkutils.table2dataset(T, spark) | Converts MATLAB table back to Spark DataFrame |
DF.write.mode(m).format(f).saveAsTable(name) | Writes DataFrame to Unity Catalog table |
matlab.pyspark.sql.functions.col(name) | Creates a Column reference |
matlab.pyspark.sql.functions.lit(value) | Creates a literal Column constant |
| Function | Purpose |
|---|---|
databricks.JDBCConnection() | Creates a JDBC connection (full package) |
StandaloneJDBCConnection() | Creates a JDBC connection (no package dependencies) |
databricks.SQLWarehouse.connect() | Connects to a SQL Warehouse by ID |
j.Connection | The database.jdbc.connection object for Database Toolbox functions |
j.testConnection() | Verifies connection is working |
j.saveSource() | Saves connection as a Database Toolbox data source |
close(j) | Closes connection and releases resources |
Run setup from the package's Software/MATLAB directory. It is interactive — follow prompts for host URL, auth method, cluster ID, and Databricks Connect library installation.
The Databricks Connect library is downloaded via pip into Software/MATLAB/Connect/<version>/venv/. Requires Python 3.10-3.12. If the download fails repeatedly, ask the user to check with their IT team — do not retry with modified arguments.
cd('/path/to/databricks-package/Software/MATLAB')
setup
startup
After setup, MATLAB's pyenv must point to the venv Python. If getDatabricksSession fails with "databricks.connect package is not installed":
terminate(pyenv);
pyenv(Version="/path/to/databricks-package/Software/MATLAB/Connect/17.3/venv/bin/python");
Warning: If Python is already loaded InProcess, terminate(pyenv) fails. A full MATLAB restart is required. Do not attempt to switch pyenv mid-session after Python has been used.
For authentication configuration details (.databrickscfg format, profiles, environment variables, token caching), see references/authentication.md — consult when configuring auth methods or troubleshooting credential issues.
Data stays on the cluster until explicitly collected. Filter server-side first, then collect.
spark = getDatabricksSession(authMethod="PAT");
DF = spark.read().table("catalog.schema.sensor_readings");
filtered = DF.filter("temperature > 100 AND event_date > '2024-01-01'");
T = table(filtered);
No cluster needed. Starts instantly with 10-minute inactivity timeout. Requires Python 3.11-3.12 and Databricks Connect >= 15.4.
spark = getDatabricksSession(serverless=true);
DF = spark.read().table("catalog.schema.events");
T = table(DF.limit(50));
withColumn requires Column objects — not raw scalars. Use col() for references and lit() for constants.
import matlab.pyspark.sql.functions.col
import matlab.pyspark.sql.functions.lit
DF = spark.read().table("catalog.schema.measurements");
DF2 = DF.withColumn("temp_fahrenheit", col("temp_celsius") * lit(9/5) + lit(32));
Always specify .mode() — without it, writes fail if the target exists.
DF_new = matlab.sparkutils.table2dataset(T, spark);
DF_new.write.mode("overwrite").format("delta").saveAsTable("catalog.schema.output_table");
DF = spark.read.format("csv").option("header", "true").load("/Volumes/catalog/schema/volume/data.csv");
T = table(DF.limit(1000));
j = databricks.JDBCConnection(catalog="mycatalog", schema="myschema");
data = sqlread(j.Connection, "mytable");
close(j);
warehouse.connect() returns a database.jdbc.connection directly — pass it to sqlread/fetch without .Connection.
warehouse = databricks.SQLWarehouse;
warehouse.id = "abc123def456";
conn = warehouse.connect();
data = fetch(conn, "SELECT * FROM mycatalog.myschema.mytable LIMIT 10");
close(conn);
When the user does NOT have the MATLAB Interface for Databricks, use StandaloneJDBCConnection. Requires Database Toolbox and the Simba driver jar only. See references/standalone-jdbc.md for setup and JSON template.
j = StandaloneJDBCConnection(schema="myschema", catalog="mycatalog");
data = fetch(j.Connection, "SELECT * FROM mytable LIMIT 10");
close(j);
The JDBC driver's OAuth flow cannot open a browser when MATLAB runs on a Databricks cluster. Use package-managed auth instead.
if databricks.internal.isOnDatabricks()
j = databricks.JDBCConnection(authMethod="OauthU2M", useDriverAuth=false);
else
j = databricks.JDBCConnection();
end
data = fetch(j.Connection, "SELECT * FROM mycatalog.myschema.mytable LIMIT 10");
close(j);
Simba driver write performance improves with native query mode (enabled by default).
j = databricks.JDBCConnection(catalog="main", schema="telemetry");
sqlwrite(j.Connection, "measurements", data);
close(j);
Use onCleanup to guarantee closure even when operations fail.
j = databricks.JDBCConnection(catalog="main", schema="analytics");
cleanup = onCleanup(@() close(j));
data = fetch(j.Connection, "SELECT * FROM large_table WHERE id > 1000");
For Spark stale sessions:
clear spark
spark = getDatabricksSession(forceNewSession=true);
table(DF) — pulling millions of unfiltered rows wastes bandwidth and memory"catalog.schema.table"getDatabricksSession() for Spark — never construct sessions manually or mimic PySpark builder patternsdatabricks.JDBCConnection or StandaloneJDBCConnection for JDBC — never manually construct JDBC URLs with database()authMethod explicitly — the default chain may trigger unexpected browser prompts.databrickscfg or environment variablesclose(j) when done with JDBC connectionsforceNewSession=true for stale Spark sessions, not clear allreferences/driver-selection.md — consult when choosing between Simba and OSS drivers or configuring Java| Mistake | Why It's Wrong | Correct Approach |
|---|---|---|
Manually building JDBC URLs with database() | Fragile, error-prone, exposes secrets, misses automatic URL construction, driver classpath management, unified auth chain, and write optimization | Use databricks.JDBCConnection() or StandaloneJDBCConnection() |
Inventing PySpark builder: databricks.spark.Session.builder().remote() | Does not exist in MATLAB | Use getDatabricksSession() |
Calling table(DF) on unfiltered large tables | Transfers entire dataset locally | Apply .filter() / .select() / .limit() first |
Passing scalars to withColumn: DF.withColumn("x", 2) | Second argument must be a Column object | Use DF.withColumn("x", lit(2)) |
Writing without .mode(): DF.write.save(path) | Fails if target exists | Use .mode("overwrite") or .mode("append") |
| Using driver auth on-cluster | Browser OAuth fails in browser-based MATLAB | Use useDriverAuth=false |
| Hardcoding tokens in source code | Security risk; tokens expire | Store in .databrickscfg or environment variables |
Calling getDatabricksSession() without authMethod | Default chain may trigger unwanted browser prompt | Pass authMethod="PAT" or other method explicitly |
| Mismatched Python version for Spark | Session creation fails | Match local Python to runtime (e.g., 3.12 for runtime 17.3) |
| Using OSS driver with Java 8 | OSS requires Java 11+ | Set Java 11+ via jenv first (requires MATLAB restart) |
Passing DataFrame args to chained methods: DF.unionAll(DF2) | MATLAB Spark wrapper doesn't support DataFrame method arguments | Use spark.sql() with SQL UNION ALL instead |
Copyright 2026 The MathWorks, Inc.