スレッド「main」の例外org.apache.flink.api.common.typeutils.CompositeType $ InvalidFieldReferenceException:GenericType <UserActionLogPOJO>のフィールド式でフィールドを参照できませんフィールド式は、POJOタイプ、タプル、およびケースクラスでのみサポートされます。(POJOと見なされるものについてはFlinkのドキュメントを参照してください。)
org.apache.flink.streaming.util.typeutils.FieldAccessorFactory.getAccessor(FieldAccessorFactory.java:193)
at org.apache.flink.streaming.api.functions.aggregation .ComparableAggregator。<init>(ComparableAggregator.java:67)
at org.apache.flink.streaming.api.datastream.KeyedStream.max(KeyedStream.java:836)
at Aggregate.main(Aggregate.java:52)
終了コード1で終了したプロセス
解決:
①src/ mainの下に新しいフォルダリソースを作成します
②リソースに新しいファイルlog4j.propertiesを作成します
③log4j.propertiesに追加:
# 可以设置级别: debug>info>error
#debug :显示 debug 、 info 、 error
#info :显示 info 、 error
#error :只 error
# 也就是说只显示比大于等于当前级别的信息
log4j.rootLogger=info,appender1
#log4j.rootLogger=info,appender1
#log4j.rootLogger=error,appender1
# 输出到控制台
log4j.appender.appender1=org.apache.log4j.ConsoleAppender
# 样式为 TTCCLayout
log4j.appender.appender1.layout=org.apache.log4j.TTCCLayout
④pom.xmlに追加:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.17</version>
</dependency>
⑤重新运行代码,我们会看到:
[main] INFOorg.apache.flink.api.java.typeutils.TypeExtractor-クラスUserActionLogPOJOにはフィールドproductPriceのゲッターが含まれていません
[main] INFOorg.apache.flink.api.java.typeutils.TypeExtractor-クラスクラスUserActionLogPOJOはできませんすべてのフィールドが有効なPOJOフィールドであるとは限らないため、POJOタイプとして使用し、GenericTypeとして処理する必要があります。パフォーマンスへの影響の詳細については、「データ型とシリアル化」に関するFlinkのドキュメントをお読みください。
プロジェクトの下のPOJOクラスに移動し、上記のINFO情報に従って変更し、再実行して問題を解決します。
注意してください、上記の設定方法は実際には他のメイヴンプロジェクトに適しています、それは必ずしもフリンクではないかもしれません
さて、最後にPOJOの外観を与えます(Flink承認のpojoクラス)
import java.io.Serializable;
public class UserActionLogPOJO implements Serializable
{
private String userId; //用户id
private String itemId; //商品分类id
private int productPrice; //商品价格
public UserActionLogPOJO (String userId,String itemId,int productPrice)
{
this.userId=userId;
this.itemId=itemId;
this.productPrice=productPrice;
}
/** default constructor */
public UserActionLogPOJO ()
{
}
public String getUserID()
{
return this.userId;
}
public void setProductID(String itemId)
{
this.itemId=itemId;
}
//-----------------------------------
public String getItemId() {
return itemId;
}
public void setItemId(String itemId) {
this.itemId = itemId;
}
//-----------------------------------
public void setProductPrice(int price)
{
this.productPrice=productPrice;
}
public int getproductPrice() {
return productPrice;
}
//-----------------------------------
//-----------------------------------
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserId() {
return userId;
}
public String toString()
{
return "userId="+userId+","+"price="+productPrice;
}
}
参照:
[1] org.apache.log4j.Loggerの詳細な説明