Return-Path: X-Original-To: apmail-flink-user-archive@minotaur.apache.org Delivered-To: apmail-flink-user-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 561EC17E41 for ; Sun, 8 Feb 2015 12:07:36 +0000 (UTC) Received: (qmail 78874 invoked by uid 500); 8 Feb 2015 12:07:36 -0000 Delivered-To: apmail-flink-user-archive@flink.apache.org Received: (qmail 78814 invoked by uid 500); 8 Feb 2015 12:07:36 -0000 Mailing-List: contact user-help@flink.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user@flink.apache.org Delivered-To: mailing list user@flink.apache.org Received: (qmail 78805 invoked by uid 99); 8 Feb 2015 12:07:35 -0000 Received: from mail-relay.apache.org (HELO mail-relay.apache.org) (140.211.11.15) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 08 Feb 2015 12:07:35 +0000 Received: from mail-qa0-f53.google.com (mail-qa0-f53.google.com [209.85.216.53]) by mail-relay.apache.org (ASF Mail Server at mail-relay.apache.org) with ESMTPSA id 716051A0320 for ; Sun, 8 Feb 2015 12:07:35 +0000 (UTC) Received: by mail-qa0-f53.google.com with SMTP id n4so17339376qaq.12 for ; Sun, 08 Feb 2015 04:07:34 -0800 (PST) MIME-Version: 1.0 X-Received: by 10.140.16.50 with SMTP id 47mr28292770qga.105.1423397254057; Sun, 08 Feb 2015 04:07:34 -0800 (PST) Received: by 10.229.189.135 with HTTP; Sun, 8 Feb 2015 04:07:33 -0800 (PST) In-Reply-To: References: Date: Sun, 8 Feb 2015 13:07:33 +0100 Message-ID: Subject: Re: flink loop From: Till Rohrmann To: user@flink.apache.org Content-Type: multipart/related; boundary=001a11c1005ab3f1f5050e927f67 --001a11c1005ab3f1f5050e927f67 Content-Type: multipart/alternative; boundary=001a11c1005ab3f1f3050e927f66 --001a11c1005ab3f1f3050e927f66 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Hi, you could apply a filter operation after the cross operation which filters all combinations out which are not in ascending order. Cheers, Till On Sun, Feb 8, 2015 at 12:38 PM, tanguy racinet wrote: > Hi, > > Thank you for you reply. It helped us solve the looping problems in a > nicer way. > > We are struggling with some aspects of the cross function. > Still trying to implement the Apriori algorithm, we need to create > combinations of frequent itemSets. > Our problem is that the crossing gives us duplicates, for instance :(1, 2= , > 3, 4) and (2, 1, 4, 3) are equivalent for us so we are trying to find a w= ay > to remove that kind of duplicate in our DataSet. > > We already removed duplicates inside our combinations (1, 1, 2) =3D> (1, = 2). > > We were thinking about using HashSet but they are not serializable and we > cannot use them inside the workflow, but only inside functions. > > Can you think of any way to remove those duplicates ? > > Thank you, > =E1=90=A7 > > > > > *Racinet Tanguy* > > *EIT ICT Labs Master School Student* > *Distributed Systems and Services* > > Tel : +33 6 63 20 89 16 / +49 176 3749 8854 > Mail : tanracinet@gmail.com > > On Thu, Feb 5, 2015 at 8:51 PM, Vasiliki Kalavri < > vasilikikalavri@gmail.com> wrote: > >> Hi, >> >> I'm not familiar with the particular algorithm, but you can most probabl= y >> use one of the two iterate operators in Flink. >> >> You can read a description and see some examples in the documentation: >> >> http://flink.apache.org/docs/0.8/programming_guide.html#iteration-operat= ors >> >> Let us know if you have any questions! >> >> Cheers, >> V. >> >> On 5 February 2015 at 20:37, tanguy racinet wrote= : >> >>> Hi, >>> >>> We are trying to develop the Apriori algorith with the Flink for our >>> Data minning project. >>> In our understanding, Flink could handle loop within the workflow. >>> However, our knowledge is limited and we cannot find a nice way to do i= t. >>> >>> Here is the flow of my algorithm : >>> GenerateCandidates ----> CalculateFrequentItemSet >>> mapper ----> reducer >>> >>> We would like to use the reducer result as the mapper's entry for a >>> predefined number of times (loop x times). >>> >>> Is there any smart way to that with Flink. Or should we just copy paste >>> the loop x times ? >>> >>> Thank you, >>> >>> >>> >>> *Racinet Tanguy* >>> >>> *EIT ICT Labs Master School Student* >>> *Distributed Systems and Services* >>> >>> Tel : +33 6 63 20 89 16 / +49 176 3749 8854 >>> Mail : tanracinet@gmail.com >>> >>> =E1=90=A7 >>> >> >> > --001a11c1005ab3f1f3050e927f66 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
Hi,

you could apply a filter operation = after the cross operation which filters all combinations out which are not = in ascending order.

Cheers,

Till

On Sun, Feb 8, 2015 at 12:38 PM, tanguy racinet <tanracinet@gmail.com= > wrote:
H= i,

Thank you for you reply. It helped us solve the loopi= ng problems in a nicer way.

We are struggling with s= ome aspects of the cross function.
Still trying to implement the = Apriori algorithm, we need to create combinations of frequent itemSets.
Our problem is that the crossing gives us duplicates, for instance := (1, 2, 3, 4) and (2, 1, 4, 3) are equivalent for us so we are trying to fin= d a way to remove that kind of duplicate in our DataSet.

We already removed duplicates inside our combinations (1, 1, 2) =3D&= gt; (1, 2).

We were thinking about using HashSet b= ut they are not serializable and we cannot use them inside the workflow, bu= t only inside functions.

Can you think of any way = to remove those duplicates ?

Thank you,
=E1=90=A7

=
=C2=A0

Raci= net Tanguy

EIT ICT Labs=C2=A0Master Sc= hool Student
Distributed Systems and Services

Tel : +33 6 63 20 89 16=C2=A0/ +49 176 3749 8854
Mail : tanracinet@gmail.com

<= /div>

On Thu, Feb 5,= 2015 at 8:51 PM, Vasiliki Kalavri <vasilikikalavri@gmail.com&= gt; wrote:
Hi,

I'm not familiar with the particular algorithm= , but you can most probably use one of the two iterate operators in Flink.<= /div>

Yo= u can read a description and see some examples in the documentation:=C2=A0<= /div>=

Let u= s know if you have any questions!

<= /div>
Cheers,
V.

On 5 February 2015 at 20:37, tanguy racinet <<= a href=3D"mailto:tanracinet@gmail.com" target=3D"_blank">tanracinet@gmail.c= om> wrote:
Hi,

We are = trying to develop the Apriori algorith with the Flink for our Data minning = project.
In our understanding, Flink could handle loop within the= workflow.
However, our knowledge is limited and we cannot find a= nice way to do it.

Here is the flow of my algorit= hm :
GenerateCandidates ----> CalculateFrequentItemSet
mapper =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0----> reducer

We would like to use= the reducer result as the mapper's entry for a predefined number of ti= mes (loop x times).

Is there any smart way to that= with Flink. Or should we just copy paste the loop x times ?

=
Thank you,
=C2=A0

Raci= net Tanguy

EIT ICT Labs=C2=A0Master Sc= hool Student
Distributed Systems and Services

Tel : +33 6 63 20 89 16=C2=A0/ +49 176 3749 8854
Mail : tanracinet@gmail.com

<= /div>

=E1=90= =A7



--001a11c1005ab3f1f3050e927f66-- --001a11c1005ab3f1f5050e927f67 Content-Type: image/gif; name="logoEITICTlabs_siganure.gif" Content-Disposition: inline; filename="logoEITICTlabs_siganure.gif" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: 690870b8a490f335_0.1.1 R0lGODlhFwEXAfcAAJvSr+74/mPN867XjXbLw8Pp+lpjp1/DuPH5/pbRsJjW0+j2/JWuonfItWHD uPT7/sbT6LTZqrLj+Vdinbjl+W11s6TVrdHs8lDI7M3s+1TK8+Lz8tXv+aXf+HnS9ZHa95eiy6rh +YPLs8Xq+q3h+ZzNZ9Lu+3TT9YyVx+b1+bLh4krD1cjn3LXk+XmJuInW9XeOxand46jZzKTRdtrx /ERLmqHa2EbD29Lp1pXa90zG5ay42L3l6sTiwWzGtluys73o+oDU9eP0/cjr+sLX0M7nzsHfs6nX rKK7qpzc92RzmbTC18Pkz4nNsoecoknF4Ya03aHUrsvs+8vr8Nvu5FHDy7vm+lLJ79zy/Nnw+23Q 9FfK8jpAl1FYo9fw+zlzsk7H6OHz/FyBpam5yrHaorDi+WzO7ITV9YSQuMrkxo3T0kWq1N/w6+T1 /UlUlcThuuX09lzM89br3IHS6sXivd3v6dzu5sXo60jE3VqDtprVx7Xj8MDo+tfu7EScx7/erlJe ln2Nrd3y+YHQy9Xq2m6JvFbDxJvZ5bjbqrvcqW6r1JDPsa7Yq9Ho0ub1/WyCnc3q7G/JwK3g7WHH zjg/k9zq9rjj51R/onaInT9+vGXFuI+eu77gy2CCoVvDvy80kLzcqdjs4ACv7ODx7svlyaPe+NHq 0LveozrB8P7+/67k+fn9//b8/t3w5/v9/+z4/fz+/9ft2+v3/cbkusDhrrXamPj8/t/z/Mznxef2 /anUgQ+z7eHx77rG4uDx7YiTvx247obW9dns4aHd+EnF8ePz9Mzlyiy876Dg+Nrt45/QduHy8L3d q+Ly8XLR9E/I61SfrrPSp8fjwp/d+Nnt4qOt1NHe7q3Xl+Tz9arHpsPgt5O54ICJwJPIVFnDwdfs 35OexUd8pIzX9q7Evn6Tnk/Dz9Xl6Lvl8dfv9sDn9Mbp9aTSgVzEv1nG0JHX8ExvsKbe83fP42jG u9br4JyqzmbO9KbXt7jPwofV837R6bPi7IjOvIOQt9Xv+////+j2/SH5BAAAAAAALAAAAAAXARcB AAj/AP0JHEiwoMGDCBMqXMiwocOHCldJlMjqgcWLD2xNXOUKosePIEOKHEmypMmTIF2tshggwKt/ MGPKnElTZksED1itgoWyp8+fQIMKLbkSQQBZNZMqXVrzVYCMHYdKnUq1qtWBK48y3cq1a8wACFhF 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 2qxO07wIWahO6/TOVWBO7cSLgAAAOw== --001a11c1005ab3f1f5050e927f67--