2015-03-16 16 views
5

Le query Spark SQL 1.2.0 restituiscono JavaRDD. Le query Spark SQL 1.3.0 restituiscono DataFrame. La conversione di DataFrame in JavaRDD da DataFrame.toJavaRDD sembra richiedere un po 'di tempo. Ho cercato di usare il DataFrame.map() e ottenuto un problema sconcertante: "?"Come creare ClassTag per 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); 
     } 


    }, ?); 

dovrebbe essere scala.reflect.ClassTag. Ho usato ClassManifestFactory.fromClass (String.class) e non ha funzionato. Cosa dovrei inserire in "?".

Tra l'altro, l'esempio dato da http://spark.apache.org/docs/1.3.0/sql-programming-guide.html s' Interoperabilità con sezione RDDs codice Java non è corretto: Ha usato 'mappa (nuova function() {' la 'funzione' non è accettabile non ci dovrebbe.. essere "Function1"

+0

questo è un problema con Java 8 per scintilla che dipende EsotericSoftware/reflectasm (attualmente supporta solo Java 7) : https://issues.apache.org/jira/browse/SPARK-6152. –

risposta

0

Prova questo:.

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

Prova questo:

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

provare questo: (funzionato per me)

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

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