flink-sql報錯POJO does not define field name: EXPR$1

代碼如下

 

import org.apache.flink.api.java.DataSet;

import org.apache.flink.api.java.ExecutionEnvironment;

import org.apache.flink.table.api.Table;

import org.apache.flink.table.api.java.BatchTableEnvironment;

import java.util.ArrayList;

import java.util.List;

 

/**

* @author zhangkai

* @create 2019/12/18

*/

public class WordCount {

public static void main(String[] args) throws Exception{

ExecutionEnvironment env = ExecutionEnvironment.getExecutionEnvironment();

BatchTableEnvironment tableEnvironment = BatchTableEnvironment.create(env);

List list = new ArrayList<>();

String[] wordStr = "a,b,a,b,c,a".split(",");

for(String word : wordStr){

list.add(new WC(word,1));

}

DataSet<WC> dataSource = env.fromCollection(list);

tableEnvironment.registerDataSet("WordCount",dataSource,"word,frequency");

Table table = tableEnvironment.sqlQuery("select word,sum(frequency) from WordCount where frequency =1 group by word");

DataSet<WC> dataSet = tableEnvironment.toDataSet(table,WC.class);

dataSet.print();

}

public static class WC{

public String word;

public long frequency;

public WC() {

}

public WC(String word, long frequency) {

this.word = word;

this.frequency = frequency;

}

@Override

public String toString() {

return "WC{" +

"word='" + word + '\'' +

", frequency=" + frequency +

'}';

}

}

}

 

運行代碼報錯

POJO does not define field name: EXPR$1

 

解決方法:

原來是sql的sum沒有別名導致的報錯,而且別名必須是括號裏的字段名,很奇怪的問題,

Table table = tableEnvironment.sqlQuery("select word,sum(frequency) as frequency from WordCount where frequency =1 group by word");

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章