Hi 你的Event类定义没有贴完整,不过有个怀疑点,你应该有一个public Event(int, String, long, long)的构造函数,需要在Event定义里增加一个空的构造函数,类似这样 public class Event implements Serializable { private static final long serialVersionUID = 4826873295740075360L; public int t = 0; public String user = ""; public long event = 0L; public long timestamp = LocalDateTime.nowTimeMillis();
public Event() { } } Flink需要根据空的构造函数才能识别出这是一个pojo类 On Fri, Sep 23, 2022 at 5:37 PM Frank <frank6...@qq.com.invalid> wrote: > Hi, Shammon, > > > 嗯,我是该贴一下Event类,如下: > > > public class Event implements Serializable { > > > private static final long serialVersionUID = 4826873295740075360L; > > > public int t = 0; > public String user = ""; > public long event = 0L; > public long timestamp = LocalDateTime.nowTimeMillis(); > > > } > > > 你可以看到,字段都是public。 > > > 我刚试著改成private然后添加getter, setter,但结果一样。 > > > > > > ------------------ 原始邮件 ------------------ > 发件人: > "Shammon FY" > < > zjur...@gmail.com>; > 发送时间: 2022年9月23日(星期五) 中午11:20 > 收件人: "user-zh"<user-zh@flink.apache.org>;"Frank"<frank6...@qq.com > >; > > 主题: Re: > StreamTableEnvironment.fromDataStream(dataStream)如何生成T类型的Schema? > > > > Hi @frank > > 你没有贴你定义的Event类代码,我觉得你的Event类定义有点问题 > > 如果需要flink识别Event的内部字段,需要将Event定义成pojo类,例如将字段都定义成public,或者可以是private,但是需要增加setXXX和getXXX函数 > > > > > > > On Thu, Sep 22, 2022 at 5:45 PM Frank <frank6...@qq.com.invalid> wrote: > > DataStreamSource<Event&gt; datastream = env.fromElements( > new Event(0, > "张三", 1L), new Event(0, "孙小美", 1L)); > StreamTableEnvironment tenv = StreamTableEnvironment.create(env); > Table table = tenv.fromDataStream(datastream) > table.printSchema(); > 为什么上面代码生成table的schema是下面这样而不是Event的字段(t, user, event, timestamp)? > ( > &nbsp; `f0` RAW('utils.transfor.Event', '...') > ) > 怎么改?