PySpark:随机化数据帧中的行

har*_*hit 6 dataframe python-3.x apache-spark apache-spark-sql pyspark

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

zer*_*323 12

它适用于Pandas,因为在本地系统中取样通常是通过改组数据来解决的.另一方面,Spark通过对数据执行线性扫描来避免混乱.这意味着Spark中的采样仅随机化样本成员而不是订单.

您可以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
Run Code Online (Sandbox Code Playgroud)

但它是:

  • 昂贵 - 因为它需要完全洗牌,这是你通常想要避免的东西.
  • 可疑 - 因为a中的值的顺序DataFrame不是你在非平凡的情况下可以真正依赖的东西,并且由于DataFrame不支持索引,所以如果没有收集它就相对无用.