2016-11-22 4 views
2

Verwendung:scala.collection.Seq funktioniert nicht auf Java

  • Apache Spark 2.0.1
  • Java 7

Auf der Apache Spark-Java-API-Dokumentation für die Klasse DataSet erscheint ein example, um die Methode Join mithilfe eines scala.collection.Seq-Parameters zu verwenden, um die Spaltennamen anzugeben. Aber ich kann es nicht benutzen. Auf der Dokumentation sie das folgende Beispiel liefern:

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

Fehler: Symbol Methode Seq (String) kann nicht

finden Mein Code:

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

Siehe http://stackoverflow.com/questions/10060377/how-to-use -scala-varargs-aus-Java-Code. –

Antwort

2

Seq(x, y, ...) ist eine Scala Weg Sequenz erstellen Seq hat sein Companion-Objekt, das über die Methode apply verfügt, die es erlaubt, nicht jedesmal new zu schreiben.

Es sollte möglich sein, zu schreiben:

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")));` 

Oder Sie können eigene kleine Methode erstellen:

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

@TzachZohar Ja, mein Fehler, ich vergaß, dass die Verwendung von Companion-Objekt ist nicht so einfach;) Bitte beachten Sie Edit –

+0

@TzachZohar beachtenswert, dass es funktioniert nur, wenn Sie importieren "scala.collection.immutable.Seq", nicht "veränderbar" oder die "scala.collection.Seq". –

+0

@TzachZohar welche Version von Scala benutzt du? In meiner Version, 2.11, kann ich nicht 'neue Seq (" vaue ")' als Seq ist abstrakt - sowohl "scala.collection.Seq" und unveränderliche Version –