Spark Dataset - NumberFormatException:

当我尝试创建数据集并从中收集数据时,我遇到了一个奇怪的异常。


Exception in thread "main" java.lang.NumberFormatException: Zero length BigInteger

    at java.math.BigInteger.<init>(BigInteger.java:302)

    at org.apache.spark.sql.catalyst.expressions.UnsafeRow.getDecimal(UnsafeRow.java:405)

    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.writeFields_3_3$(generated.java:298)

    at org.apache.spark.sql.catalyst.expressions.GeneratedClass$SpecificUnsafeProjection.apply(generated.java:35)

    at org.apache.spark.sql.execution.LocalTableScanExec$$anonfun$unsafeRows$1.apply(LocalTableScanExec.scala:41)

    at org.apache.spark.sql.execution.LocalTableScanExec$$anonfun$unsafeRows$1.apply(LocalTableScanExec.scala:41)

    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)

    at scala.collection.TraversableLike$$anonfun$map$1.apply(TraversableLike.scala:234)

    at scala.collection.mutable.ResizableArray$class.foreach(ResizableArray.scala:59)

执行代码如下所示:


List<SimplePojo> list ...

Dataset<SimplePojo> ds = sparkSession.createDataset(list, Encoders.bean(SimplePojo.class))

ds.collectoAsList();

SimplePojo 类包含一个方法 getSomething(),这显然会导致异常。当我注释掉它时,一切都很好。


public class SimplePojo {


   private int id;

   private OtherPojo otherPojo = new OtherPojo();


   @Deprecated // required by park serialization. Use builder

   public SimplePojo(){}


   publi int getId(){

      return id;

   }


   public String getSomething() {

      return otherPojo.getSomething();

   }


   // sets ...

}

有没有人知道可能发生了什么?


白板的微信
浏览 417回答 1
1回答

温温酱

事实证明,我不能有不属于豆子的get。我假设它是分析器期望的“豆类格式”。Introspector在发现一个没有各自属性的get时会发疯(根据Java版本的不同方式)。由于我无论如何都找不到对分析器说“忽略此方法”,因此解决方案是避免与bean属性无关的get和set。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java