如何为Spark SQL DataFrame Mapping构造ClassTag?

Pau*_* Wu 5 sql scala apache-spark rdd

Spark SQL 1.2.0查询返回JavaRDD.Spark SQL 1.3.0查询返回DataFrame.通过DataFrame.toJavaRDD将DataFrame转换为JavaRDD似乎需要花费很多时间.我试图使用DataFrame.map()并遇到一个令人费解的问题:

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

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


    }, ?); 
Run Code Online (Sandbox Code Playgroud)

"?" 应该是scala.reflect.ClassTag.我使用了ClassManifestFactory.fromClass(String.class)并且它不起作用.我该怎么说"?".

顺便说一句,http://spark.apache.org/docs/1.3.0/sql-programming-guide.html与RDDs部分的Java代码部分给出的例子没有得到纠正:它使用了"map(new Function) (){"."函数"在那里是不可接受的.它应该是"Function1".

小智 6

试试这个:

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));
Run Code Online (Sandbox Code Playgroud)


小智 0

尝试这个:

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

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

}, ClassManifestFactory$.MODULE$.fromClass(String.class)); 
Run Code Online (Sandbox Code Playgroud)