2016-11-22 1 views
2

上では動作しません。 exampleは、scala.collection.Seqパラメータを使用してメソッド結合を使用して列名を指定します。しかし、私はそれを使用することはできません。彼らは、次の例を提供マニュアルの :scala.collection.Seqは、Javaを使用した

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

エラー:シンボルメソッド配列(String)を見つけることができません

マイコード:

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-varargs-from-java-code –

答えて

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は 'mutable'や' scala.collection.immutable.Seq'をインポートした場合にのみ動作することに注意する価値があります。 'scala.collection.Seq'です。 –

+0

@TzachZoharあなたが使っているScalaのバージョンは?私のバージョン2.11では、Seqは抽象的であるため、 'new Seq(" vaue ")'を実行することはできません - scala.collection.Seqと不変のバージョン –

関連する問題