Yes, you are right. But to my knowledge Broadcast Variables are not yet
supported in the Scala API. We are working on this though but it is not
ready yet.


On Thu, Aug 14, 2014 at 5:41 PM, Maximilian Alber <
[email protected]> wrote:

> Yeah, I got that. What I had in mind was something like a variable that
> can be used as broadcast var, thus at runtime gets supplied by Flink to the
> function f.e. a map function.
>
> It would be something like a shortcut. Right now I already could use a
> broadcast variable, and extract inside the open function the only value it
> is holding and then supplying it to the apply function. Am I right with
> that?
>
> Mit freundlichen Grüßen,
> Max!
>
>
> On Thu, Aug 14, 2014 at 5:24 PM, Aljoscha Krettek <[email protected]>
> wrote:
>
>> No, unfortunately that's not possible right now because a DataSet only
>> represents an Execution that is run when the program is executed. So while
>> building  your program by chaining together operations the actual data is
>> not yet available.
>>
>> I hope that helps but the whole thing can be a bit confusing. So just ask
>> if you need clarification.
>>
>> Cheers,
>> Aljoscha
>>
>>
>> On Thu, Aug 14, 2014 at 3:01 PM, Maximilian Alber <
>> [email protected]> wrote:
>>
>>> Thanks for the quick reply.
>>>
>>> Ok, but is there a way to get the only element out of a DataSet into a
>>> variable?
>>>
>>> Mit freundlichen Grüßen,
>>> Max!
>>>
>>>
>>> On Thu, Aug 14, 2014 at 11:13 AM, Aljoscha Krettek <[email protected]>
>>> wrote:
>>>
>>>> Hi,
>>>> for the Java API there are the so-called broadcast variables. Those can
>>>> be used to set the output of an operation as an additional input of another
>>>> operator. The feature is not available in the Scala API though? Or am I
>>>> wrong here?
>>>>
>>>> I'm right now working on bringing the Scala API to feature parity with
>>>> the Java API.
>>>>
>>>> Aljoscha
>>>>
>>>>
>>>> On Wed, Aug 13, 2014 at 5:51 PM, Maximilian Alber <
>>>> [email protected]> wrote:
>>>>
>>>>> Hi Flinker,
>>>>>
>>>>> I try to implement a quadratic distribution i.e. I would like to
>>>>> choose an element from a dataset with probability proportional to it's
>>>>> squared value.
>>>>>
>>>>> In Python this would look like this:
>>>>>
>>>>> s = numpy.cumsum(residual**2)
>>>>> x = numpy.random.rand() * s[-1]
>>>>> return residual[numpy.sum(x > s)]
>>>>>
>>>>>  With Flink it is somewhat more complicated, I gave it a try:
>>>>>
>>>>> import util.Random
>>>>>
>>>>> val X = DataSource(XFile, CsvInputFormat[Float])
>>>>> val Y = DataSource(YFile, CsvInputFormat[Float])
>>>>>
>>>>> // take square of them
>>>>> val X_2 = X map { x => (x*x, x) }
>>>>> // calc sum of squares
>>>>> val X_sum = X_2 reduce { (x1, x2) => (x1._1 + x2._1, 0) } map { x =>
>>>>> x._1 }
>>>>> // choose random value in our range
>>>>> val y = X_sum map { Random.nextFloat * _ }
>>>>>
>>>>> // make cummulative sum and find value we search for
>>>>> val center = X_2 map {
>>>>>     x => (0.0f, x._1, x._2) //sum, x^2, x
>>>>> } reduce {
>>>>>     (x1, x2) =>
>>>>>     if(x1._1 > y){// already found value we searched for
>>>>>        x1
>>>>>      } else {
>>>>>        if(x1._1 + x2._2 > y){// this is the value we search for
>>>>>           (x1._1 + x2._2, x2._2, x2._3)
>>>>>        } else {
>>>>>           (x1._1 + x2._2, x1._2, x2._3) // just go on with cummulative
>>>>> sum
>>>>>       }
>>>>>    }
>>>>> } map { _._3 } // we just need the initial value
>>>>>
>>>>> val output = center //map { x => println(x); x }
>>>>> val sink = output.write("/tmp/test", CsvOutputFormat[Float], "Center
>>>>> output")
>>>>>
>>>>> My problem here is now, I need to get the information stored in y into
>>>>> the reduce statement to gather the center value. Unfortunately I have no
>>>>> idea how to achieve that. If somebody knows a way I would be rather
>>>>> thankful. If someone would know a easier way to solve this problem too!
>>>>>
>>>>> Many thanks in advance!
>>>>>
>>>>> Cheers Max
>>>>>
>>>>
>>>>
>>>
>>
>

Reply via email to