2016-07-19 8 views
1

Ich schrieb Vectors (org.apache.spark.mllib.linalg.Vector) zum HDFS wie dem folgendenJava Read Write Funken Vectors auf HDFS

public void writePointsToFile(Path path, FileSystem fs, Configuration conf, 
     List<Vector> points) throws IOException { 

    SequenceFile.Writer writer = SequenceFile.createWriter(conf, 
      Writer.file(path), Writer.keyClass(LongWritable.class), 
      Writer.valueClass(Vector.class)); 

    long recNum = 0; 

    for (Vector point : points) { 
     writer.append(new LongWritable(recNum++), point); 
    } 
    writer.close(); 
} 

(nicht sicher, dass ich die richtigen Art und Weise verwendet, das zu tun, kann es noch nicht testen)

jetzt muss ich diese Datei als JavaRDD<Vector> lesen, weil ich es in Spark Clustering K-mean verwenden möchte, aber nicht weiß, wie dies zu tun ist.

Antwort

0

Spark unterstützt direkt das Lesen von Hadoop SequenceFiles. Sie würden so etwas wie:

JavaSparkContext sc = new JavaSparkContext(conf); 
JavaPairRDD<LongWritable, Vector> input = 
    sc.sequenceFile(fileName, LongWritable.class, Vector.class); 

Sie brauchen dann nur noch die JavaPairRDD<LongWritable, Vector> in eine JavaRDD<Vector> zu konvertieren.

JavaRDD<Vector> out = input.map(new Function<Tuple2<LongWritable, Vector>, Vector>() { 

    @Override 
    public Vector call(Tuple2<LongWritable, Vector> tuple) throws Exception { 
     return tuple._2(); 
    } 
}); 
+0

vielen Dank für Ihre Antwort, können Sie mir bitte sagen, wie die JavaPairRDD in eine JavaRDD konvertieren.? – Emad

+0

Ich habe ein Kartenfunktionsbeispiel hinzugefügt, um es in eine JavaRDD umzuwandeln –

Verwandte Themen