【问题标题】:Spark create dataset using encoder where row is array typeSpark使用编码器创建数据集,其中行是数组类型
【发布时间】:2018-02-28 20:23:21
【问题描述】:

我无法弄清楚,编码器从 RDD 下面创建数据集的正确实现?

例如

JavaRDD<Integer[]>rdd= sparkContext.parallelize(
                Arrays.asList(new Integer[][]{new Integer[]{1,2},
                new Integer[]{3,4}
                ,new Integer[]{6,7}}));

以下实现失败-

DataSet<Integer> ds = sqlContext.createDataset(rdd.rdd(),Encoders.bean(Integer[].class));

线程“主”java.lang.AssertionError 中的异常:断言失败 在 scala.Predef$.assert(Predef.scala:165) 在 org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$.javaBean(ExpressionEncoder.scala:90) 在 org.apache.spark.sql.Encoders$.bean(Encoders.scala:142) 在 org.apache.spark.sql.Encoders.bean(Encoders.scala)

如何为数组类型创建编码?谢谢!

【问题讨论】:

    标签: java apache-spark apache-spark-sql


    【解决方案1】:

    请先转换成DataFrame再转换成Dataset

    Dataset<Integer[]> dataFrame = sqlContext.createDataFrame(rdd, Integer[].class);
    Dataset<Integer[]> ds = dataFrame.as(Encoders.bean(Integer[].class));
    

    【讨论】:

    • 对于spark.createDataset(strings, Encoders.bean(String[].class)) 我得到java.lang.AssertionError: assertion failed at scala.Predef$.assert(Predef.scala:156) at org.apache.spark.sql.catalyst.encoders.ExpressionEncoder$.javaBean(ExpressionEncoder.scala:87) at org.apache.spark.sql.Encoders$.bean(Encoders.scala:142) at org.apache.spark.sql.Encoders.bean(Encoders.scala) 我正在尝试从List&lt;String[]&gt; 创建一个数据集
    猜你喜欢
    • 2017-08-31
    • 2017-08-04
    • 2021-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-29
    • 2016-10-08
    • 1970-01-01
    相关资源
    最近更新 更多