2017-02-23 137 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