1,BillCount和Record是类对象。 BillCount对象的列是Record的一些。
2,Flink源从kafka主题获取'Record'数据。
case class BillCount(logisId: Int, provinceId: Int, cityId: Int, orderRequVari: Int, orderRecAmount: Double, orderRecDate: Long)
val kafkaInputStream: DataStream[Record] = env.addSource(source) //source is FlinkKafkaConsumer010 source
val tbDataStream : DataStream[BillCount] = kafkaInputStream.map(
new MapFunction[Record, BillCount] {
override def map(value: Record) = {
BillCount(value.getLogis_id, value.getProvince_id, value.getCity_id,
value.getOrder_require_varieties, value.getOrder_rec_amount, value.getStore_rec_date.getTime)
}
})
val stream = tbDataStream.toTable(tbEnv, 'logisId, 'provinceId, 'cityId, 'orderRequVari, 'orderRecAmount, 'orderRecDate) // occur error here
以下是例外:
Exception in thread "main" org.apache.flink.table.api.TableException: Table of atomic type can only have a single field.
at org.apache.flink.table.api.TableEnvironment$$anonfun$1.apply(TableEnvironment.scala:627)
at org.apache.flink.table.api.TableEnvironment$$anonfun$1.apply(TableEnvironment.scala:624)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
at scala.collection.TraversableLike$$anonfun$flatMap$1.apply(TraversableLike.scala:251)
at scala.collection.IndexedSeqOptimized$class.foreach(IndexedSeqOptimized.scala:33)
at scala.collection.mutable.ArrayOps$ofRef.foreach(ArrayOps.scala:108)
at scala.collection.TraversableLike$class.flatMap(TraversableLike.scala:251)
at scala.collection.mutable.ArrayOps$ofRef.flatMap(ArrayOps.scala:108)
at org.apache.flink.table.api.TableEnvironment.getFieldInfo(TableEnvironment.scala:624)
at org.apache.flink.table.api.StreamTableEnvironment.registerDataStreamInternal(StreamTableEnvironment.scala:398)
at org.apache.flink.table.api.scala.StreamTableEnvironment.fromDataStream(StreamTableEnvironment.scala:85)
at org.apache.flink.table.api.scala.DataStreamConversions.toTable(DataStreamConversions.scala:58)
答案 0 :(得分:0)
BillCount应该是POJO类。这意味着BillCount类应该具有默认的构造函数(无参数)和get / set函数。经验:
class BillCount{
private int logisId;
private int provinceId;
private int cityId;
BillCount(){}
public void setLogisId(int logisId){
this.logisId = logisId;
}
public void setProvinceId(int provinceId){
this.provinceId = provinceId;
}
public void setCityId(int cityId){
this.cityId = cityId;
}
public int getLogisId(){
return this.logisId;
}
public int getProvinceId(){
return this.provinceId;
}
public int getCityId() {
return this.cityId;
}
}