如何将 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<String,User> pairRDD...
。所以如果我调用pairRDD.collect()
,所有Dataset
的优化都会丢失。以上是关于如何将 JavaPairRDD 转换为数据集?的主要内容,如果未能解决你的问题,请参考以下文章
JavaPairRDD 到 SPARK 中的数据集<Row>