First of all, thank you for the detailed explanation.
I tried to use the MapPartitionFunction instead, as it matches better the case,
but now I can't use any more the open(Configuration) method as I could with the
RichMapFunction.
I need a workaround to read the broadcast variable, to obtain the same result
as:
getRuntimeContext().getBroadcastVariable("parameters");
Is it somehow possible to access the broadcast variable from inside the
mapPartition?
Thank you!
Camelia
----- Mail original -----
> De: "Fabian Hueske" <[email protected]>
> À: [email protected]
> Envoyé: Mardi 4 Novembre 2014 16:50:37
> Objet: Re: RichMapFunction related question
> Hi Camelia,
> in general, it is assumed that the user-defined operations do not have side
> effects.
> When sharing a counter between invocations of the user-defined function
> (flatMap() in your case) this would happen.
> Since, the system does not give any guarantees which data is processed on
> which node (within the semantics of the operator of course), doing something
> as you did, will not give deterministic results.
> To answer your questions:
> 1) open is called exactly once for each parallel operator instance. There
> might be more than one operators instances on each node (depending on the
> number of configured slots). All instance on the same node will run within
> the same JVM, so be careful with singletons or other shared objects.
> 2) each parallel operator instance does have its own member variables, i.e.,
> k will not be shared among other operator instances. However, this operator
> does not return deterministic results as pointed out.
> If you want to map over all elements of a partition, mapPartition might be a
> better fit than flatMap.
> Best, Fabian
> 2014-11-04 16:16 GMT+01:00 Camelia-Elena Ciolac <
> [email protected] > :
> > Hello,
>
> > I have 2 questions regarding the RichMapFunction, starting from its use in
> > https://github.com/apache/incubator-flink/blob/master/flink-examples/flink-java-examples/src/main/java/org/apache/flink/examples/java/ml/LinearRegression.java
> > .
>
> > Q1: if we run this operator with 4 nodes, does its open(Configuration)
> > method
> > execute once on each node ?
>
> > Q2: can we use fields (such as a counter) in the RichMapFunction class so
> > that they are not shared between computation nodes, but are shared for all
> > tuples that pass this transformation on a given computation node?
>
> > Something like:
>
> > dataset1.map(
>
> > new RichMapFunction<T1,T2>(){
>
> > private int k;
>
> > public void open(Configuration config){
>
> > ...........
>
> > k = 0;
>
> > }
>
> > public T2 map(T1 tupin){
>
> > k++;
>
> > return new T2(....,k)
>
> > }
>
> > }
>
> > );
>
> > where T1,T2 stand for some tuple types or classes .
>
> > Thank you in advance!
>
> > Best regards,
>
> > Camelia
>