Как преобразовать JavaPairRDD в набор данных?

SparkSession.createDataset() позволяет только List, RDD, or Seq, но не поддерживает JavaPairRDD.

Итак, если у меня есть JavaPairRDD<String, User>, из которого я хочу создать Dataset, будет ли жизнеспособным обходным путем для ограничения SparkSession.createDataset() создать класс-оболочку UserMap, который содержит два поля: String и User.

Тогда сделайте spark.createDataset(userMap, Encoders.bean(UserMap.class));?


person Glide    schedule 23.02.2017    source источник


Ответы (1)


Если вы можете преобразовать JavaPairRDD в List<Tuple2<K, V>>, вы можете использовать метод createDataset, который принимает List. См. ниже пример кода.

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");
person abaghel    schedule 23.02.2017
comment
В моей ситуации у меня есть много преобразований, чтобы получить JavaPairRdd<String,User> pairRDD.... Поэтому, если я вызову pairRDD.collect(), вся оптимизация Dataset будет потеряна. - person Glide; 23.02.2017