代碼如下
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");