python-3.x - PySpark:随机化数据框中的行

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

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

最佳答案

它在 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不支持索引,不收集就相对没用。
  • 关于python-3.x - PySpark:随机化数据框中的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36803030/

    相关文章:

    python - 在 Python 中处理数据的首选方式是什么?

    scala - 根据一个 RDD 中的键过滤另一个 RDD

    apache-spark - 使用 Apache Spark 和 OpenCV 进行图像分析

    python-3.x - 如何根据数据框 pandas 的唯一首字母构建新列

    python - 在Python(Pandas/Numpy)中。如何创建具有两个独立系列的最大值/最小值的列?

    Python:如果键不在字典中,为什么不调用 __eq__() ?

    python - 在 Pandas Dataframe 中生成另一列的某些子集的最小值的新列的有效方法

    python - 通过网络或任何其他 key 交换进行 Diffie-Hellman key 交换

    apache-spark - 单一位置的 Spark 模式管理

    python - 使用 resample 为 pandas 数据框中的不同列聚合具有不同规则的数据