如何从Spark DataFrame中随机选择行,而基于列的条件也必须保持



让我们有一个带有列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())

最新更新