Spark使用编码器创建数据集,其中row是数组类型

时间:2017-09-19 22:49:15

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

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

e.g。

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));
  

线程中的异常&#34; main&#34; java.lang.AssertionError:断言失败     在scala.Predef $ .assert(Predef.scala:165)at   org.apache.spark.sql.catalyst.encoders.ExpressionEncoder $ .javaBean(ExpressionEncoder.scala:90)     在org.apache.spark.sql.Encoders $ .bean(Encoders.scala:142)at at   org.apache.spark.sql.Encoders.bean(Encoders.scala)

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

1 个答案:

答案 0 :(得分:0)

请尝试先将其转换为DataFrame,然后再转换为Dataset

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