我有一个数据框,我想在数据帧中随机化行。我尝试通过给出1的一小部分来对数据进行采样,这样做无效(有趣的是,这在Pandas中有效)。
答案 0 :(得分:7)
它在Pandas中起作用,因为在本地系统中取样通常是通过改组数据来解决的。另一方面,Spark通过对数据执行线性扫描来避免混乱。这意味着Spark中的采样只会随机化样本成员而不是订单。
您可以通过一列随机数订购ItemContainerGenerator
:
DataFrame
但它是:
from pyspark.sql.functions import rand
df = sc.parallelize(range(20)).map(lambda x: (x, )).toDF(["x"])
df.orderBy(rand()).show(3)
## +---+
## | x|
## +---+
## | 2|
## | 7|
## | 14|
## +---+
## only showing top 3 rows
中的值顺序不是你可以真正依赖的非平凡情况,并且因为DataFrame
不支持索引,所以没有收集就相对没用。