Study interactive :: Progress tools open in the Study Hub reader.

Java for Data Science

Guide to using Java in data science and machine learning projects.

Table of Contents


Introduction

Java in Data Science

While Python dominates data science, Java has important roles:

When to Use Java

Use Java when:

Use Python when:


Why Java for Data Science?

Advantages

Performance:

Enterprise Integration:

Big Data:

Production:

Disadvantages

Verbosity:

ML Libraries:


Java ML Libraries

Weka

What: Machine learning library for Java

Features:

Example:

import weka.classifiers.trees.J48;
import weka.core.Instances;
import weka.core.converters.ConverterUtils.DataSource;

// Load data
DataSource source = new DataSource("data.arff");
Instances data = source.getDataSet();
data.setClassIndex(data.numAttributes() - 1);

// Train classifier
J48 tree = new J48();
tree.buildClassifier(data);

// Classify
double prediction = tree.classifyInstance(data.instance(0));

Deeplearning4j

What: Deep learning library for Java

Features:

Example:

import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;

// Configure network
MultiLayerConfiguration conf = new NeuralNetConfiguration.Builder()
    .list()
    .layer(0, new DenseLayer.Builder().nIn(784).nOut(100).build())
    .layer(1, new OutputLayer.Builder().nIn(100).nOut(10).build())
    .build();

// Create network
MultiLayerNetwork net = new MultiLayerNetwork(conf);
net.init();

// Train
net.fit(trainData);

Smile

What: Statistical Machine Intelligence and Learning Engine

Features:

Example:

import smile.classification.RandomForest;
import smile.data.DataFrame;
import smile.data.formula.Formula;

// Load data
DataFrame df = DataFrame.read("data.csv");

// Train model
Formula formula = Formula.lhs("target");
RandomForest model = RandomForest.fit(formula, df);

// Predict
double prediction = model.predict(newInstance);

Apache Mahout

What: Scalable machine learning library

Features:


Data Processing with Java

DataFrames with Tablesaw

What: Java dataframe library

Example:

import tech.tablesaw.api.Table;
import tech.tablesaw.api.StringColumn;

// Load data
Table df = Table.read().csv("data.csv");

// Filter
Table filtered = df.where(df.stringColumn("category").isEqualTo("A"));

// Group by
Table grouped = df.summarize("sales", sum).by("category");

// Sort
Table sorted = df.sortOn("sales");

CSV Processing

import com.opencsv.CSVReader;
import java.io.FileReader;

// Read CSV
CSVReader reader = new CSVReader(new FileReader("data.csv"));
String[] nextLine;
while ((nextLine = reader.readNext()) != null) {
    // Process row
    String value = nextLine[0];
}

JSON Processing

import com.google.gson.Gson;
import com.google.gson.JsonObject;

// Parse JSON
Gson gson = new Gson();
JsonObject json = gson.fromJson(jsonString, JsonObject.class);
String value = json.get("key").getAsString();

Integration with Python

Py4J

What: Bridge between Python and Java

Example:

Java Side:

import py4j.GatewayServer;

public class JavaApp {
    public String processData(String data) {
        // Process data
        return processedData;
    }
    
    public static void main(String[] args) {
        GatewayServer server = new GatewayServer(new JavaApp());
        server.start();
    }
}

Python Side:

from py4j.java_gateway import JavaGateway

gateway = JavaGateway()
java_app = gateway.entry_point

result = java_app.processData("data")

Jython

What: Python implementation in Java

Use Cases:


Spark with Java

Spark Java API

Example:

import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;

// Create Spark session
SparkSession spark = SparkSession.builder()
    .appName("JavaSparkExample")
    .getOrCreate();

// Read data
Dataset<Row> df = spark.read().csv("data.csv");

// Transform
Dataset<Row> filtered = df.filter("age > 25");

// Aggregate
Dataset<Row> aggregated = df.groupBy("category")
    .agg(functions.sum("sales"));

// Write
aggregated.write().csv("output");

Spark MLlib with Java

import org.apache.spark.ml.classification.RandomForestClassifier;
import org.apache.spark.ml.Pipeline;
import org.apache.spark.ml.feature.VectorAssembler;

// Prepare features
VectorAssembler assembler = new VectorAssembler()
    .setInputCols(new String[]{"feature1", "feature2"})
    .setOutputCol("features");

// Create model
RandomForestClassifier rf = new RandomForestClassifier()
    .setLabelCol("label")
    .setFeaturesCol("features");

// Create pipeline
Pipeline pipeline = new Pipeline()
    .setStages(new PipelineStage[]{assembler, rf});

// Train
PipelineModel model = pipeline.fit(trainDF);

// Predict
Dataset<Row> predictions = model.transform(testDF);

Best Practices

1. Use Right Tool for Job

2. Leverage JVM Ecosystem

3. Interoperability

4. Performance

5. Code Quality


Resources

Libraries

Learning Resources

Tools


Try next: Only switch to Java/Spark when data size or existing stack forces it. Otherwise stay in Python.