簡體   English   中英

在 Java Spark 中將 RDD 轉換為數據集

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM