由于数据类型不匹配'SerializeFromObject

时间:2018-09-16 05:14:11

标签: apache-spark apache-spark-sql spark-streaming

我在火花流应用程序中使用FlatMapGroupsWithStateFunction。

 FlatMapGroupsWithStateFunction<String, Row, SessionInfo, SessionUpdate> idstateUpdateFunction =
  new FlatMapGroupsWithStateFunction<String, Row, SessionInfo, SessionUpdate>() {.....}

会话更新类如下;

  public static class SessionUpdate implements Serializable {

private static final long serialVersionUID = -3858977319192658483L;

private String instanceId;

private ArrayList<GenericRowWithSchema> milestones = new ArrayList<GenericRowWithSchema>();

private Timestamp processingTimeoutTimestamp;

public SessionUpdate() { 
  super();
}

public SessionUpdate(String instanceId, ArrayList<GenericRowWithSchema> milestones, Timestamp processingTimeoutTimestamp) {
  super();
  this.instanceId = instanceId;
  this.milestones = milestones;
  this.processingTimeoutTimestamp = processingTimeoutTimestamp;
}

public String getInstanceId() {
  return instanceId;
}

public void setInstanceId(String instanceId) {
  this.instanceId = instanceId;
}

public ArrayList<GenericRowWithSchema> getMilestones() {
  return milestones;
}

public void setMilestones(ArrayList<GenericRowWithSchema> milestones) {
  this.milestones = milestones;
}

public Timestamp getProcessingTimeoutTimestamp() {
  return processingTimeoutTimestamp;
}

public void setProcessingTimeoutTimestamp(Timestamp processingTimeoutTimestamp) {
  this.processingTimeoutTimestamp = processingTimeoutTimestamp;
}

}

将以下内容添加到该类中后,我得到如下所述的异常;

private ArrayList<GenericRowWithSchema> milestones = new ArrayList<GenericRowWithSchema>();

例外:

ERROR  cannot resolve 'named_struct()' due to data type mismatch: input to function named_struct requires at least one argument;;

'SerializeFromObject [staticinvoke(类org.apache.spark.unsafe.types.UTF8String,StringType,fromString,assertnotnull(input [0,oracle.insight.spark.event_processor.EventProcessor $ SessionUpdate,true])。getInstanceId,true ,false)AS instanceId#62,mapobjects(MapObjects_loopValue2,MapObjects_loopIsNull2,ObjectType(类org.apache.spark.sql.catalyst.expressions.GenericRowWithSchema),如果(isnull(lambdavariable(MapObjects_loopValue2,MapObjects_loopIsNull2.ObjectType .sql.catalyst.expressions.GenericRowWithSchema),true)))null,否则named_struct(),assertnotnull(input [0,oracle.insight.spark.event_processor.EventProcessor $ SessionUpdate,true])。getMilestones,None)AS里程碑#63 ,staticinvoke(类org.apache.spark.sql.catalyst.util.DateTimeUtils $,TimestampType,来自JavaTimestamp,assertnotnull(input [0,oracle.insight.spark.event_processor.EventProcessor $ SessionUpdate,true])。getProcessingTimeoutTimestamp,true,false )AS processingTimeoutTimestamp#64] +-FlatMapGroupsWithState,cast(值#54作为字符串).toString,createexternalrow(EventTime#23.toString,InstanceID#24.toString,Model#25.toString,Milestone#26.toString,Region#27.toString,SalesOrganization#28 .toString,ProductName#29.toString,ReasonForQuoteReject#30.toString,ReasonforRejectionBy#31.toString,OpportunityAmount#32.toJavaBigDecimal,Discount#33.toJavaBigDecimal,TotalQuoteAmount#34.toJavaBigDecimal,NetQuoteAmount#35.toJavaBigDecimal,ApprovedDiscount#36。 ,TotalOrderAmount#37.toJavaBigDecimal,StructField(EventTime,StringType,true),StructField(InstanceID,StringType,true),StructField(Model,StringType,true),StructField(Milestone,StringType,true),StructField(Region,StringType,true) ),StructField(SalesOrganization,StringType,true),StructField(ProductName,StringType,true),StructField(ReasonForQuoteReject,StringType,true),StructField(ReasonforRejectionBy,StringType,true),...还有6个字段),[value#54 ],[EventTime#23,InstanceID#24,Model#25,里程碑#26,地区#27,SalesOrganization#28,产品名称#29,ReasonForQuoteReject#30,ReasonforRejectionBy#31,OpportunityAmount#32,Discount#33,TotalQuoteAmount#34,NetQuoteAmount#35,ApprovedDiscount#36,TotalOrderAmount#37],obj# 61:oracle.insight.spark.event_processor.EventProcessor $ SessionUpdate,类[instanceId [0]:字符串,里程碑[0]:array>,processingTimeoutTimestamp [0]:timestamp],Append,false,ProcessingTimeTimeout

任何提示我为什么会收到此异常?

谢谢。

0 个答案:

没有答案