Expand description
Spark Connection Client for Rust
Currently, the Spark Connect client for Rust is highly experimental and should not be used in any production setting. This is currently a “proof of concept” to identify the methods of interacting with Spark cluster from rust.
§Quickstart
Create a Spark Session and create a DataFrame from a arrow::array::RecordBatch.
use spark_connect_rs::{SparkSession, SparkSessionBuilder};
use spark_connect_rs::functions::{col, lit}
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let spark: SparkSession = SparkSessionBuilder::remote("sc://127.0.0.1:15002/;user_id=example_rs")
        .build()
        .await?;
    let name: ArrayRef = Arc::new(StringArray::from(vec!["Tom", "Alice", "Bob"]));
    let age: ArrayRef = Arc::new(Int64Array::from(vec![14, 23, 16]));
    let data = RecordBatch::try_from_iter(vec![("name", name), ("age", age)])?
    let df = spark.create_dataframe(&data).await?
    // 2 records total
    let records = df.select(["*"])
        .with_column("age_plus", col("age") + lit(4))
        .filter(col("name").contains("o"))
        .count()
        .await?;
    Ok(())
};Create a Spark Session and create a DataFrame from a SQL statement:
use spark_connect_rs::{SparkSession, SparkSessionBuilder};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let spark: SparkSession = SparkSessionBuilder::remote("sc://127.0.0.1:15002/;user_id=example_rs")
        .build()
        .await?;
    let df = spark.sql("SELECT * FROM json.`/datasets/employees.json`").await?;
    // Show the first 5 records
    df.filter("salary > 3000").show(Some(5), None, None).await?;
    Ok(())
};Create a Spark Session, read a CSV file into a DataFrame, apply function transformations, and write the results:
use spark_connect_rs::{SparkSession, SparkSessionBuilder};
use spark_connect_rs::functions as F;
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let spark: SparkSession = SparkSessionBuilder::remote("sc://127.0.0.1:15002/;user_id=example_rs")
        .build()
        .await?;
    let paths = ["/datasets/people.csv"];
    let df = spark
        .read()
        .format("csv")
        .option("header", "True")
        .option("delimiter", ";")
        .load(paths)?;
    let df = df
        .filter("age > 30")
        .select([
            F::col("name"),
            F::col("age").cast("int")
        ]);
    df.write()
      .format("csv")
      .option("header", "true")
      .save("/opt/spark/examples/src/main/rust/people/")
      .await?;
    Ok(())
};§Databricks Connection
Spark Connect is enabled for Databricks Runtime 13.3 LTS and above, and requires the feature
flag feature = "tls". The connection string for the remote session must contain the following
values in the string;
"sc://<workspace id>:443/;token=<personal access token>;x-databricks-cluster-id=<cluster-id>"Re-exports§
- pub use dataframe::DataFrame;
- pub use dataframe::DataFrameReader;
- pub use dataframe::DataFrameWriter;
- pub use session::SparkSession;
- pub use session::SparkSessionBuilder;
Modules§
- catalog
- Spark Catalog representation through which the user may create, drop, alter or query underlying databases, tables, functions, etc.
- client
- Implementation of the SparkConnectServiceClient
- column
- Column represents a column in a DataFrame that holds a spark::Expression
- conf
- Configuration for a Spark application. Used to set various Spark parameters as key-value pairs.
- dataframe
- DataFrame representation for Spark Connection
- errors
- Defines a SparkError for representing failures in various Spark operations. Most of these are wrappers for tonic or arrow error messages
- expressions
- Traits for converting Rust Types to Spark Connect Expression Types
- functions
- A re-implementation of Spark functions
- group
- A DataFrame created with an aggregate statement
- plan
- Logical Plan representation
- readwriter
- DataFrameReader & DataFrameWriter representations
- session
- Spark Session containing the remote gRPC client
- spark
- Spark Connect gRPC protobuf translated using tonic
- storage
- Enum for handling Spark Storage representations
- streaming
- Streaming implementation for the Spark Connect Client
- types
- Rust Types to Spark Types
- window
- Utility structs for defining a window over a DataFrame