2017-02-23 85 views
0

SparkSession.createDataset()只允许List, RDD, or Seq - 但它不支持JavaPairRDD如何将JavaPairRDD转换为数据集?

所以,如果我有一个JavaPairRDD<String, User>,我想创建一个从Dataset,会为SparkSession.createDataset()限制的可行workround创建一个包装UserMap类,它包含两个字段:StringUser

然后做spark.createDataset(userMap, Encoders.bean(UserMap.class));

回答

1

如果您可以将JavaPairRDD转换为List<Tuple2<K, V>>,那么您可以使用带有List的createDataset方法。见下面的示例代码。

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

,或者你可以转换到RDD

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

在我的情况,我有很多的变换在'JavaPairRdd pairRDD ...'到达。所以如果我调用'pairRDD.collect()',所有'Dataset'优化都将丢失。 – Glide