[spark-cassandra-connector]如何在Spark 2.3.1中将Scala隐式支持的代码转换为Java

时间:2019-04-17 11:24:56

标签: java apache-spark apache-spark-sql spark-cassandra-connector

我正在尝试将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上正常工作了...

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

1 个答案:

答案 0 :(得分:1)

Java中没有DataFrame这样的东西-它始终是DataSet类的Row。在Scala中,有一个简单的别名...

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

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.readfull code)来完成:

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