2016-11-22 33 views
2

工作中使用一個example使用方法join使用scala.collection.Seq參數來指定列名稱。但我無法使用它。 他們提供下面的示例文件:scala.collection.Seq不上的Java

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

錯誤:找不到符號法SEQ(字符串)

我的代碼:

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")); 
} 
+0

見http://stackoverflow.com/questions/10060377/how-to-use -scala-可變參數從 - Java的代碼。 –

回答

2

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)); 
    } 
+0

@TzachZohar是的,我的錯誤,我忘記了使用伴侶對象不是那麼容易;)請參閱編輯 –

+0

@TzachZohar值得注意的是,它只適用於您導入'scala.collection.immutable.Seq',而不是'mutable'或'scala.collection.Seq'。 –

+0

@TzachZohar你正在使用哪個版本的Scala?在我的版本中,2.11,因爲Seq是抽象的,所以我不能執行'seq(「vaue」)''scala.collection.Seq'和不可變的版本 –