如何将JavaPairRDD转换为数据集?

时间:2017-02-23 02:24:39

标签: java apache-spark rdd apache-spark-dataset

SparkSession.createDataset()仅允许List, RDD, or Seq - 但不支持JavaPairRDD

因此,如果我有一个JavaPairRDD<String, User>我希望从Dataset创建SparkSession.createDataset(),那么UserMap限制的可行工作空间是否会创建一个包含String的包含两个字段:Userspark.createDataset(userMap, Encoders.bean(UserMap.class));

然后执行let str = "[[1,2],[1,3],[1,4]]" let data = str.data(using: .utf8)! do { let json = try JSONSerialization.jsonObject(with: data, options: []) if let arr = json as? [[Int]] { print(arr) } } catch { print(error) }

1 个答案:

答案 0 :(得分: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");