Re: data enrichment via endpoint, serializable issue
Posted by
Xingcan Cui on
URL: http://deprecated-apache-flink-user-mailing-list-archive.369.s1.nabble.com/data-enrichment-via-endpoint-serializable-issue-tp21629p21633.html
Hi Steffen,
You could make the class `TextAPIClient` serializable, or use `RichMapFunction` [1] and instantiate all the required objects in its `open()` method.
Best,
Xingcan
Hi all,
I’m new to Apache Flink and I have the following issue:
I would like to enrich data via map function. For that I call a method which calls an endpoint but I get following error message
„The implementation of the MapFunction is not serializable. The object probably contains or references non serializable fields.
at org.apache.flink.api.java.ClosureCleaner.clean(ClosureCleaner.java:99)“ …
„Caused by: java.io.NotSerializableException: com.aylien.textapi.TextAPIClient“
Is there a smart way to fix that issue?
Regards,
Steffen
Map Function:
DataStream<TweetSentiment> tweetSentimentDataStream = noRTDataStream
.map(new MapFunction<Tweet, TweetSentiment>() {
@Override
public TweetSentiment map(Tweet tweet) throws Exception {
String polarity = "good";
polarity = test.testMethod();
polarity = sentimentAnalysis.sentiment(tweet.getText());
return new TweetSentiment(tweet, polarity, 0);
}
});
Class:
public class SentimentAnalysis implements Serializable {
private TextAPIClient _sentimentClient;
public SentimentAnalysis () {
_sentimentClient = new TextAPIClient(„xxx", „xxx");
}
public String sentiment(String text) throws Exception{
SentimentParams sentimentParams = new SentimentParams(text, null, null);
Sentiment sentiment = _sentimentClient.sentiment(sentimentParams);
return sentiment.getPolarity();
}
(Analysis via Aylien)