【问题标题】:convert RDD to Dataset in Java Spark在 Java Spark 中将 RDD 转换为数据集
【发布时间】:2019-11-11 21:09:53
【问题描述】:

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

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

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

【问题讨论】:

    标签: java apache-spark


    【解决方案1】:

    .createDataset() 接受 RDD&lt;T&gt; 而不是 JavaRDD&lt;T&gt;JavaRDD 是 RDD 的包装器,以便更轻松地从 Java 代码调用。它在内部包含 RDD,可以使用.rdd() 访问。下面可以创建Dataset

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

    【讨论】:

      【解决方案2】:

      在你的rdd上使用.toDS()你会得到一个数据集。

      如果有帮助,请告诉我。干杯。

      【讨论】:

      • 试试Dataset&lt;Row&gt; personDS = sqlContext.createDataFrame(personRDD, Person.class);
      • 它是一个DataFrame,但我需要一个Dataset
      • 是的,它会给你一个数据集
      • Dataset&lt;Row&gt; 只是DataFrame 的别名,Dataset&lt;Person&gt; 是必需的。不是Dataset&lt;Row&gt;
      • *DataFrame 只是Dataset&lt;Row&gt; 的别名
      【解决方案3】:

      除了接受的答案之外,如果您想在 Java 中创建 Dataset&lt;Row&gt; 而不是 Dataset&lt;Person&gt;,请尝试如下:

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

      【讨论】:

        猜你喜欢
        • 2018-06-14
        • 2016-12-12
        • 2017-07-08
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 2019-07-23
        • 2020-09-06
        • 1970-01-01
        相关资源
        最近更新 更多