如何将 JavaPairRDD 转换为数据集?

Posted

技术标签:

【中文标题】如何将 JavaPairRDD 转换为数据集?【英文标题】:How to convert a JavaPairRDD to Dataset? 【发布时间】: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));?

【问题讨论】:

【参考方案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的优化都会丢失。

以上是关于如何将 JavaPairRDD 转换为数据集?的主要内容,如果未能解决你的问题,请参考以下文章

使用 scala 将 JavapairRDD 转换为数据帧

JavaPairRDD 到 SPARK 中的数据集<Row>

通过操作 JavaPairRDD 的值 (Sum) 来转换 JavaPairRDD

如何将我的数据集转换为没有引号和数据集名称的 Json?

如何将数据集转换为数据表

如何将 sql 转换为 spark 数据集?