如果列中的不同计数达到 10,则只返回 true/false,而不是检查 spark 中的行数

Posted

技术标签:

【中文标题】如果列中的不同计数达到 10,则只返回 true/false,而不是检查 spark 中的行数【英文标题】:If distinct count reaches 10 in column then just return true/false instead checking laks of rows in spark 【发布时间】:2017-11-17 07:40:10 【问题描述】:

//实际上,它会遍历不同行的大量列,这是一种成本更高的方法,因为我需要检查不同计数是否达到 10,然后返回真/假。

    val distcnt = dfFilter.select(dfFilter.col("colName")).distinct().count()

    if (distcnt > 10) 
      //I need to do stuff here if it greater than 10 distinct rows
    

【问题讨论】:

【参考方案1】:

无论是否昂贵,它都是唯一的方法,不同的计数不会在某些条件下被中断,它将遍历整个列,然后返回一个不同的计数值,据我所知,没有替代方法,但如果有人知道任何替代方案都会很高兴知道。

【讨论】:

我认为我们可以使用 rdd 并一一添加列值,如果它达到 10 然后返回 true/false RDD 比数据帧慢,所以如果可能的话尽量避免它们,直到必要时【参考方案2】:

如果你的count条件总是10,那么你可以限制count函数之前返回的行数,

val distcnt = dfFilter.select(dfFilter.col("colName")).distinct().limit(11).count()

【讨论】:

这将检查随机 11 个值,以便给出错误的结果 在这里,你区分所有列行然后进行限制。仅与问题相同。请尝试 udf 并在 Set 集合中一一添加记录,然后返回 true/false。我不知道 udf 所以你可以通过使其成为可执行代码来发送代码。 需要什么:列 ['colName' here] 的不同值的计数并检查计数是否大于 10。这就是您的代码 sn-p 告诉我的。如果我错了,请纠正。

以上是关于如果列中的不同计数达到 10,则只返回 true/false,而不是检查 spark 中的行数的主要内容,如果未能解决你的问题,请参考以下文章

如何获取列中每个不同值的计数? [复制]

计数值出现在 MySQL 中特定列中的次数

编辑数字直到达到总和值

当列中的行为空时,ORACLE显示计数为零

如何使用 Linq 获取列中每个不同值的计数

Excel - 如果单元格包含列表中的文本,则返回另一个单元格的值