首页 > 解决方案 > [spark-cassandra-connector]如何在spark 2.3.1中将scala隐式支持的代码转换为java

问题描述

我正在尝试将 spark-cassandra 使用的项目从 scala_2.11 重构为 java_1.8。我正在使用 spark-sql_2.11-2..3.1 和 spark-cassandra-connector_2.11-2.3.1。现在我正在尝试将代码重构为 java 1.8。

我几乎没有使用隐含和 DataFrame。

import com.datastax.spark.connector._
import spark.implicits._
    &
import org.apache.spark.sql.DataFrame

现在如何将它们转换为等效的 java 代码?任何样品?

DataFrame 的导入未被识别/定义,在 scala 2.11 上工作正常,现在它不工作......

我在这里做错了什么?如何解决?

标签: javaapache-sparkapache-spark-sqlspark-cassandra-connector

解决方案


DataFrameJava中没有这样的东西——它总是DataSet属于 class 的Row。在 Scala 中,有一个简单的别名......

这是通过以下方式从 Cassandra 读取数据的 Java 代码的最小示例spark.sql

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

public class SparkTest1 {

  public static void main(String[] args) {
    SparkSession spark = SparkSession
    .builder()
    .appName("CassandraSpark")
    .getOrCreate();

    Dataset<Row> sqlDF = spark.sql("select * from datastax.vehicle limit 1000");
    sqlDF.printSchema();
    sqlDF.show();
  }

}

或者可以通过spark.read完整代码)完成:

Dataset<Row> dataset = spark.read()
        .format("org.apache.spark.sql.cassandra")
        .options(ImmutableMap.of("table", "jtest", "keyspace", "test"))
        .load();

推荐阅读