【问题标题】:How to construct ClassTag for Spark SQL DataFrame Mapping?如何为 Spark SQL DataFrame Mapping 构建 ClassTag?
【发布时间】:2015-03-16 02:39:51
【问题描述】:

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);
        }


    }, ?); 

“?”应该是 scala.reflect.ClassTag。我使用了 ClassManifestFactory.fromClass(String.class) 但它没有用。我应该把什么放在“?”。

顺便说一句,http://spark.apache.org/docs/1.3.0/sql-programming-guide.htmlInteroperating with RDDs 部分 Java 代码给出的示例未更正:它使用了“map(new Function() {”。“Function”是那里不可接受。它应该是“Function1”。

【问题讨论】:

标签: sql scala apache-spark rdd


【解决方案1】:

试试这个:

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

【讨论】:

    【解决方案2】:

    试试这个:(为我工作)

    RDD<String> rdd = df.toJavaRDD().map(new Function<Row, String> (){
    
    @Override
    public String call(Row t1) {
        return t1.getString(0);
    }
    });
    

    【讨论】:

      【解决方案3】:

      试试这个:

      RDD<String> rdd = df.map(new AbstractFunction1<Row, String> (){
      
          @Override
          public String apply(Row t1) {
              return t1.getString(0);
          }
      
      }, ClassManifestFactory$.MODULE$.fromClass(String.class)); 
      

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 1970-01-01
        • 1970-01-01
        • 2017-12-01
        • 2022-06-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多