【问题标题】:PySpark: Randomize rows in dataframePySpark:随机化数据框中的行
【发布时间】:2016-08-16 15:04:21
【问题描述】:

我有一个数据框,我想随机化数据框中的行。我尝试通过给出 1 的分数来对数据进行采样,但这不起作用(有趣的是,这在 Pandas 中有效)。

【问题讨论】:

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


    【解决方案1】:

    它可以在 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 不支持索引,如果不收集它相对没用。

    【讨论】:

    • 能否详细说明DataFrame doesn't support indexing it is relatively useless without collecting.
    猜你喜欢
    • 2020-02-19
    • 2014-09-02
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 2019-01-21
    • 2015-11-01
    • 2013-04-02
    相关资源
    最近更新 更多