You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@spark.apache.org by Gavin Yue <yu...@gmail.com> on 2015/08/27 23:27:03 UTC
Any quick method to sample rdd based on one filed?
Hey,
I have a RDD[(String,Boolean)]. I want to keep all Boolean: True rows and
randomly keep some Boolean:false rows. And hope in the final result, the
negative ones could be 10 times more than positive ones.
What would be most efficient way to do this?
Thanks,
Re: Any quick method to sample rdd based on one filed?
Posted by Alexey Grishchenko <pr...@gmail.com>.
In my opinion aggragate+flatMap would work faster as it would make less
passes through the data. Would work like this:
import random
def agg(x,y):
x[0] += 1 if not y[1] else 0
x[1] += 1 if y[1] else 0
return x
# Source data
rdd = sc.parallelize(xrange(100000), 5)
rdd2 = rdd.map(lambda x: (x, random.choice([True, False]))).cache()
# Calculate counts for True and False
counts = rdd2.aggregate([0,0], agg, lambda x,y: (x[0]+y[0],x[1]+y[1]))
# If filtering is needed
if counts[0]*10 > counts[1]:
# Calculate sampling ratio
prob0 = float(counts[1])/10.0 / float(counts[0])
# Filter falses
rdd2 = rdd2.flatMap(lambda x: [x] if (x[1] or x[0] and random.random()
< prob0) else [])
# Count True and False again for validation - falses should be 10% of trues
rdd2.aggregate([0,0], agg, lambda x,y: (x[0]+y[0],x[1]+y[1]))
On Fri, Aug 28, 2015 at 6:39 PM, Sonal Goyal <so...@gmail.com> wrote:
> Filter into true rdd and false rdd. Union true rdd and sample of false rdd.
> On Aug 28, 2015 2:57 AM, "Gavin Yue" <yu...@gmail.com> wrote:
>
>> Hey,
>>
>>
>> I have a RDD[(String,Boolean)]. I want to keep all Boolean: True rows and
>> randomly keep some Boolean:false rows. And hope in the final result, the
>> negative ones could be 10 times more than positive ones.
>>
>>
>> What would be most efficient way to do this?
>>
>> Thanks,
>>
>>
>>
>>
--
Best regards, Alexey Grishchenko
phone: +353 (87) 262-2154
email: ProgrammerAG@gmail.com
web: http://0x0fff.com
Re: Any quick method to sample rdd based on one filed?
Posted by Sonal Goyal <so...@gmail.com>.
Filter into true rdd and false rdd. Union true rdd and sample of false rdd.
On Aug 28, 2015 2:57 AM, "Gavin Yue" <yu...@gmail.com> wrote:
> Hey,
>
>
> I have a RDD[(String,Boolean)]. I want to keep all Boolean: True rows and
> randomly keep some Boolean:false rows. And hope in the final result, the
> negative ones could be 10 times more than positive ones.
>
>
> What would be most efficient way to do this?
>
> Thanks,
>
>
>
>