在Java Spark中将RDD转换为Dataset

时间:2017-07-26 12:18:50

标签: java apache-spark

我有一个RDD,我需要将其转换为数据集,我试过:

Dataset<Person> personDS =  sqlContext.createDataset(personRDD, Encoders.bean(Person.class));

以上行引发错误,

  

无法解析方法createDataset(org.apache.spark.api.java.JavaRDD   Main.Person,org.apache.spark.sql.Encoder T)

但是,转换为Dataset后,我可以转换为Dataframe。以下代码有效:

Dataset<Row> personDF = sqlContext.createDataFrame(personRDD, Person.class);
Dataset<Person> personDS = personDF.as(Encoders.bean(Person.class));

3 个答案:

答案 0 :(得分:10)

.createDataset()接受RDD<T>而非JavaRDD<T>JavaRDD是RDD的包装器,以便更容易地从java代码调用。它在内部包含RDD,可以使用.rdd()进行访问。以下内容可以创建Dataset

Dataset<Person> personDS = sqlContext.createDataset(personRDD.rdd(), Encoders.bean(Person.class))

答案 1 :(得分:0)

在您的rdd使用.toDS()上,您将获得一个数据集。

如果有帮助,请告诉我。欢呼声。

答案 2 :(得分:0)

除了可接受的答案外,如果您想在Java中创建Dataset<Row>而不是Dataset<Person>,请尝试执行以下操作:

StructType yourStruct = ...; //Create your own structtype based on individual field types
Dataset<Row> personDS =  sqlContext.createDataset(personRDD.rdd(), RowEncoder.apply(yourStruct));