scala.collection.Seq不适用于Java

时间:2016-11-22 12:09:00

标签: java scala apache-spark

使用:

  • Apache Spark 2.0.1
  • Java 7

在类DataSet的Apache Spark Java API文档中,example使用scala.collection.Seq参数来使用方法连接来指定列名称。但是我无法使用它。 在文档中,他们提供了以下示例:

df1.join(df2, Seq("user_id", "user_name"))

错误:找不到符号方法序列(字符串)

我的代码:

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import scala.collection.Seq;

public class UserProfiles {

public static void calcTopShopLookup() {
    Dataset<Row> udp = Spark.getDataFrameFromMySQL("my_schema","table_1");

    Dataset<Row> result = Spark.getSparkSession().table("table_2").join(udp,Seq("col_1","col_2"));
}

1 个答案:

答案 0 :(得分:3)

Seq(x, y, ...)是一种创建序列的Scala方法。 Seq有它的伴随对象,它有apply方法,每次都不允许写new

应该可以写:

import scala.collection.JavaConversions;
import scala.collection.Seq;

import static java.util.Arrays.asList;

Dataset<Row> result = Spark.getSparkSession().table("table_2").join(udp, JavaConversions.asScalaBuffer(asList("col_1","col_2")));`

或者您可以创建自己的小方法:

 public static <T> Seq<T> asSeq(T... values) {
        return JavaConversions.asScalaBuffer(asList(values));
    }