2014-11-15 97 views
3

我在Spark RDD中有一個數據,我想將它分成兩部分,比如0.7。例如,如果RDD看起來是這樣的:如何在火花中將rdd數據分成兩部分?

[1,2,3,4,5,6,7,8,9,10] 

我想把它分成rdd1

[1,2,3,4,5,6,7] 

rdd2

[8,9,10] 

隨着規模0.7。 rdd1rdd2應該每次都是隨機的。我想是這樣的:

seed = random.randint(0,10000) 
rdd1 = data.sample(False,scale,seed) 
rdd2 = data.subtract(rdd1) 

和它的作品,但有時當我的數據中包含dict我遇到了一些問題。例如用數據如下:

[{1:2},{3:1},{5:4,2;6}] 

我得到

TypeError: unhashable type: 'dict'

回答

3

RDDs兩者

rdd = sc.parallelize(range(10)) 
test, train = rdd.randomSplit(weights=[0.3, 0.7], seed=1) 

test.collect() 
## [4, 7, 8] 

train.collect() 
## [0, 1, 2, 3, 5, 6, 9] 

DataFrames

df = rdd.map(lambda x: (x,)).toDF(["x"]) 

test, train = df.randomSplit(weights=[0.3, 0.7]) 

提供randomSplit方法,其可以在這裏使用。