【问题标题】:How to convert a JavaPairRDD to Dataset?如何将 JavaPairRDD 转换为数据集?
【发布时间】:2017-02-23 02:24:38
【问题描述】:

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

因此,如果我有一个 JavaPairRDD<String, User>,我想从中创建一个 Dataset,那么对于 SparkSession.createDataset() 限制创建一个包含两个字段的包装器 UserMap 类是否可行:String 和 @ 987654329@。

那么spark.createDataset(userMap, Encoders.bean(UserMap.class));?

【问题讨论】:

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


    【解决方案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");
    

    【讨论】:

    • 在我的情况下,我有很多转换要到达JavaPairRdd&lt;String,User&gt; pairRDD...。所以如果我调用pairRDD.collect(),所有Dataset的优化都会丢失。
    猜你喜欢
    • 1970-01-01
    • 2016-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-05
    • 2021-05-22
    • 2012-02-17
    相关资源
    最近更新 更多