[英]convert RDD to Dataset in Java 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));
.createDataset()
接受RDD<T>
而不是JavaRDD<T>
。 JavaRDD
是 RDD 的包裝器,以便更輕松地從 Java 代碼調用。 它內部包含 RDD,可以使用.rdd()
訪問。 以下可以創建一個Dataset
:
Dataset<Person> personDS = sqlContext.createDataset(personRDD.rdd(), Encoders.bean(Person.class));
除了接受的答案,如果你想在 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));
在你的 rdd 上使用.toDS()
你會得到一個數據集。
如果有幫助,請告訴我。 干杯。
StructType schema = new StructType()
.add("Id", DataTypes.StringType)
.add("Name", DataTypes.StringType)
.add("Country", DataTypes.StringType);
Dataset<Row> dataSet = sqlContext.createDataFrame(yourJavaRDD, schema);
小心模式變量,並不總是很容易預測你需要使用什么數據類型,有時最好只對所有列使用 StringType
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.