2017-05-24 10 views

答えて

3

あなたは

public static final Function<Tuple2<String, String>,Row> mappingFunc = (tuple) -> { 
    return RowFactory.create(tuple._1(),tuple._2()); 
}; 

map関数を定義する必要があります今、あなたはJavaRDD<Row>

を取得するには、この関数を呼び出すことができます
JavaRDD<Row> rowRDD = filesRDD.map(mappingFunc); 

Java 8の場合は、単に

JavaRDD<Row> rowRDD = filesRDD.map(tuple -> RowFactory.create(tuple._1(),tuple._2())); 

JavaPairRDDからのデータフレームを取得するための別の方法は

DataFrame df = sqlContext.createDataset(JavaPairRDD.toRDD(filesRDD), Encoders.tuple(Encoders.STRING(),Encoders.STRING())).toDF(); 
です
0

これを実現する方法の1つは、以下のとおりです。

1, john 
2, steve 

File2の:

//Read whole files 
    JavaPairRDD<String, String> pairRDD = sparkContext.wholeTextFiles(path); 

    //create a structType for creating the dataframe later. You might want to 
    //do this in a different way if your schema is big/complicated. For the sake of this 
    //example I took a simple one. 
    StructType structType = DataTypes 
      .createStructType(
        new StructField[]{ 
          DataTypes.createStructField("id", DataTypes.StringType, true) 
          , DataTypes.createStructField("name", DataTypes.StringType, true)}); 


    //create an RDD<Row> from pairRDD 
    JavaRDD<Row> rowJavaRDD = pairRDD.values().flatMap(new FlatMapFunction<String, Row>() { 
     public Iterable<Row> call(String s) throws Exception { 
      List<Row> rows = new ArrayList<Row>(); 
      for (String line : s.split("\n")) { 
       String[] values = line.split(","); 
       Row row = RowFactory.create(values[0], values[1]); 
       rows.add(row); 
      } 
      return rows; 
     } 
    }); 


    //Create Dataframe. 
    sqlContext.createDataFrame(rowJavaRDD, structType); 

サンプルデータは、私が
てFile1を使用

3, Mike 
4, Mary 
df.showから

出力():Javaの7の場合

+---+------+ 
| id| name| 
+---+------+ 
| 1| john| 
| 2| steve| 
| 3| Mike| 
| 4| Mary| 
+---+------+ 
関連する問題