【发布时间】:2016-08-16 15:04:21
【问题描述】:
我有一个数据框,我想随机化数据框中的行。我尝试通过给出 1 的分数来对数据进行采样,但这不起作用(有趣的是,这在 Pandas 中有效)。
【问题讨论】:
标签: python-3.x apache-spark dataframe pyspark apache-spark-sql
我有一个数据框,我想随机化数据框中的行。我尝试通过给出 1 的分数来对数据进行采样,但这不起作用(有趣的是,这在 Pandas 中有效)。
【问题讨论】:
标签: python-3.x apache-spark dataframe pyspark apache-spark-sql
它可以在 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.