我有一个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));
答案 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));