如何在spark中将rdd数据一分为二?
Posted
技术标签:
【中文标题】如何在spark中将rdd数据一分为二?【英文标题】:how to divide rdd data into two in spark? 【发布时间】:2014-11-15 07:46:53 【问题描述】:我在 Spark RDD 中有一个数据,我想将它分成两部分,比例为 0.7。例如,如果 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。 rdd1
和 rdd2
每次都应该是随机的。我试过这样:
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'
【问题讨论】:
【参考方案1】:都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
方法。
注意事项:
randomSplit
使用单个 filter
表示每个输出 RDD
。通常,不可能从单个 Spark 转换中产生多个 RDDs
。详情请见https://***.com/a/32971246/1560062。
您不能将subtract
与字典一起使用,因为它在内部表示为cogorup
,因此需要对象为hashable
。另见A list as a key for PySpark's reduceByKey
【讨论】:
以上是关于如何在spark中将rdd数据一分为二?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ipython 中将 Spark RDD 转换为 pandas 数据帧?
如何在 ipython 中将 Spark RDD 转换为 pandas 数据帧?
如何在 Spark 中将两个 RDD[string] 合并在一起?
如何在spark(Python)中将两个rdd组合成on rdd