2015-03-16 7 views
5

Spark SQL 1.2.0 Abfragen geben JavaRDD zurück. Spark SQL 1.3.0-Abfragen geben DataFrame zurück. Die Konvertierung von DataFrame nach JavaRDD durch DataFrame.toJavaRDD scheint recht zeitaufwendig zu sein. Ich versuchte, die DataFrame.map() und bekam ein rätselhaftes Problem zu verwenden: "?"Wie erstellt man ClassTag für Spark SQL Dataframe Mapping?

DataFrame df = sqlSC.sql(sql); 
RDD<String> rdd = df.map(new AbstractFunction1<Row, String>(){ 

     @Override 
     public String apply(Row t1) { 
      return t1.getString(0); 
     } 


    }, ?); 

sollte scala.reflect.ClassTag sein. Ich habe ClassManifestFactory.fromClass (String.class) verwendet und es hat nicht funktioniert. Was soll ich bei "?"

By the way, das Beispiel von http://spark.apache.org/docs/1.3.0/sql-programming-guide.html ‚s Zusammenarbeiten mit RDDs Abschnitt Java-Code nicht korrigiert gegeben: Es "Karte (neue Funktion() {" verwendete die "Funktion" es nicht akzeptabel, sollte es aber.. sein "Function1"

+0

Dies ist ein Problem mit Java 8 für Spark, die auf EsotericSoftware/reflectasm abhängt (nur Derzeit unterstützt Java 7) : https://issues.apache.org/jira/browse/SPARK-6152. –

Antwort

0

versuchen Sie folgendes:.

RDD<String> rdd = df.map(new AbstractFunction1<Row, String>(){ 

    @Override 
    public String apply(Row t1) { 
     return t1.getString(0); 
    } 

}, ClassManifestFactory$.MODULE$.fromClass(String.class)); 
5

versuchen Sie folgendes:

RDD<String> rdd = df.map(new AbstractFunction1<Row, String>(){ 

    @Override 
    public String apply(Row t1) { 
     return t1.getString(0); 
    } 


}, scala.reflect.ClassManifestFactory.fromClass(String.class)); 
1

versuchen Sie dies: (arbeitete für mich)

RDD<String> rdd = df.toJavaRDD().map(new Function<Row, String>(){ 

@Override 
public String call(Row t1) { 
    return t1.getString(0); 
} 
}); 
Verwandte Themen