Spark Java API:如何将JavaRDD转换为RDD类型

时间:2018-07-13 21:35:25

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

我正在尝试将使用Dataframe编写的代码转换为DataSet API。 问题是我将JavaRDD创建为:

final JavaRDD<String> abcJavaRdd= jsc.textFile("/path/to/textfile");

但是sqlContext类的createDataset方法期望使用RDD<T>类型而不是JavaRDD<T>类型。

SQLContext sqlc = new SQLContext(jsc);
....
....
Encoder<Abc> abcEncoder= Encoders.bean(Abc.class);
Dataset<Abc> abcDataset= sqlc.createDataset(abcJavaRdd, abcEncoder);

以上代码中的最后一行不起作用。 我想知道如何从“ org.apache.spark.rdd.RDD”类型创建“ org.apache.spark.api.java.JavaRDD”类型吗?

我在Mapr集群上使用Java 1.8和apache spark 1.6.1。

1 个答案:

答案 0 :(得分:0)

深入研究API之后,我找到了答案。

org.apache.spark.api.java.JavaRDD类公开了一个静态方法,用于将JavaRDD类的对象转换为org.apache.spark.rdd.RDD类的createDataset类的SQLContext方法接受的对象。 / p>

Encoder<Abc> abcEncoder= Encoders.bean(Abc.class);
Dataset<Abc> abcDataset= sqlc.createDataset(JavaRDD.toRDD(abcJavaRdd), abcEncoder);

另一种方法是在rdd()上调用abcJavaRdd方法。即abcJavaRdd.rdd()