2017-03-17 11 views
0

私はSparkの新機能です。 DataFrameをPOJOのRDDに変換したい。 Like:Spark DataFrameをJavaのPOJOのRDDに変換する方法

JavaRDD<POJOClass> data = df.toJavaRDD(); 

ここで、dfはDataFrameです。

df.show()が与える次のように

+---------+---------+---------+---------+          
| A | B | C | D | 
+---------+---------+---------+---------+ 
|603300042|  1025|  2|127000948| 
|603303766|  1112|  2|127000364| 
|603302691|  1184|  2|127000853| 
|603303766|  1112|  2|127000364| 
|603302691|  1184|  2|127000853| 
|603303766|  1112|  2|127000364| 
|603303787|  1041|  2|137000323| 
|603306351|  1041|  2|137000468| 
|603304009|  1307|  2|137000788| 
|603303830|  1041|  2|137000012| 
|603301119|  1002|  2|137000369| 
|603301507|  1188|  2|137001568| 
|603302168|  1041|  2|137000468| 
+---------+---------+---------+---------+ 

を私のPOJOクラスは次のとおりです。

public static class POJOClass { 
     public Long A; 
     public Integer B; 
     public Integer C; 
     public Long D; 
} 

私はうまく機能

JavaRDD<Row> data = df.toJavaRDD(); 
を知っています。しかし、私が達成しようとしているものに対する回避策はありますか?

答えて

0

あなたは

public static class POJOClass implements serializable{ 
     public Long A; 
     public Integer B; 
     public Integer C; 
     public Long D; 
} 

    Dataset<POJOClass> pojos = context.read().json("/data.json").as(Encoders.bean(POJOClass.class)); 
+0

こんにちは、RDDのみを使用する必要があります。 –

0

データセットを使用することができ、この(テストしていない)試してみてください。

JavaPairRDD<Long, POJOClass> jpRDD = jdbcDF.toJavaRDD().mapToPair(new PairFunction<Row, Long, POJOClass>() { 

     public Tuple2<Long, POJOClass> call(Row row) throws Exception { 
      POJOClass yourPojo = new POJOClass(); 
      // Fill your pojo using row.get(index) 
      return new Tuple2<Long, POJOClass>(anIndex , (POJOClass) yourPojo); 

     } 

    }); 
0

あなたは以下のようなマップ機能を使用することができます。

import org.apache.spark.api.java.function.Function; 

JavaRDD<POJOClass> data = df.toJavaRDD().map(new Function<Row, POJOClass>() { 
     @Override 
     public POJOClass call(Row row) { 
     POJOClass pojo = new POJOClass(); 
     pojo.setA(row.getLong(0)); 
     pojo.setB(row.getInt(1)); 
     pojo.setC(row.getInt(2)); 
     pojo.setD(row.getLong(3)); 
     return pojo; 
    } 
}); 
関連する問題