我有一个OuterBean的RDD。 OuterBean非常复杂。它具有一些String,int和boolean字段,还具有几个List字段。每个列表都属于许多InnerBean类型之一。 InnerBean1,InnerBean2等。InnerBean的字段可以是String或某些原始类型。
OuterBean和InnerBean类在所有字段上都有getter和setter(为此使用Lombok批注)。所有这些bean类都实现了Serializable。为了安全起见,它们都具有所有参数且没有参数构造函数(再次使用Lombok),尽管我在以编程方式构造它们时再次使用了生成器(再次使用Lombok)。所有字段都不是最终字段。
当我尝试以下操作
spark.createDataFrame(outerBeansRdd, OuterBean.class).collect();
我得到以下内容
java.lang.IllegalArgumentException: The value (InnerBean1(dataTimestamp=1571204708203, eventTimestamp=1571204708203, value=redacted, status=0, changed=false)) of the type (x.y.z.InnerBean1) cannot be converted to struct<changed:boolean,dataTimestamp:bigint,eventTimestamp:bigint,status:int,value:string>
我注意到的一件奇怪的事是,推断的结构将bigint用于时间戳字段,但是也许可以吗?这里显然有什么问题吗?