让我们有一个带有列Col的火花数据框DF,其中该列中的值仅为0和1。我们如何选择所有行,其中col == 1和50%col == 0的行?col == 0的50%人口应随机选择。
样本方法允许随机选择50%的行,但不能施加其他条件。
我目前拥有的解决方案如下,对我来说似乎有些丑陋。我想知道是否有更好的解决方案。
from pyspark.sql import functions as F
df = df.withColumn('uniform', F.rand())
df = df.filter((df.uniform<0.5) | (df.col==1))
这不能准确保证50%,但是如果有足够大的数据集,则足够了。
df.where($"col" == 1 or rand() > rand())
注意:每次计算数据框/数据集时,这都会返回一组随机行。要解决此问题,请将rand() > rand()
资格添加为DF中的列,即df.withColumn("lucky", rand() > rand())