首页 文章

pyspark:随机化数据框中的行

提问于
浏览
1

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

1 回答

  • 6

    它适用于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
    

    但它是:

    • 昂贵 - 因为它需要完全洗牌,这是你通常想要避免的东西 .

    • 可疑 - 因为 DataFrame 中的值顺序不是你可以真正依赖的非平凡情况,并且因为 DataFrame 不支持索引,所以没有收集就相对没用 .

相关问题