PySpark:随机化数据帧中的行

时间:2016-04-22 20:44:28

标签: python-3.x apache-spark dataframe pyspark apache-spark-sql

我有一个数据框,我想在数据帧中随机化行。我尝试通过给出1的一小部分来对数据进行采样,这样做无效(有趣的是,这在Pandas中有效)。

1 个答案:

答案 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不支持索引,所以没有收集就相对没用。