2017-02-23 7 views
0

SparkSession.createDataset() erlaubt nur List, RDD, or Seq - aber es unterstützt JavaPairRDD nicht.Wie konvertiert man ein JavaPairRDD in Dataset?

Also, wenn ich ein JavaPairRDD<String, User>, die ich von einem Dataset erstellen wollen würde, eine tragfähige workround für die SparkSession.createDataset() Einschränkung ein Wrapper UserMap Klasse zu erstellen, die zwei Felder enthält: String und User.

Dann tun spark.createDataset(userMap, Encoders.bean(UserMap.class));?

Antwort

1

Wenn Sie die JavaPairRDD in List<Tuple2<K, V>> konvertieren können, dann können Sie createDataset-Methode verwenden, die List dauert. Siehe unter Beispielcode.

JavaPairRDD<String, User> pairRDD = ...; 
Dataset<Row> df = spark.createDataset(pairRDD.collect(), Encoders.tuple(Encoders.STRING(),Encoders.bean(User.class))).toDF("key","value"); 

oder Sie können In meiner Situation zu RDD

Dataset<Row> df = spark.createDataset(JavaPairRDD.toRDD(pairRDD), Encoders.tuple(Encoders.STRING(),Encoders.bean(User.class))).toDF("key","value"); 
+0

konvertieren, ich habe viele Transformationen bei 'ankommen JavaPairRdd pairRDD ...'. Also, wenn ich 'pairRDD.collect()' aufrufen, gehen alle 'Dataset'-Optimierungen verloren. – Glide

Verwandte Themen