Spark 检查数据集中是不是有至少 n 个元素

Posted

技术标签:

【中文标题】Spark 检查数据集中是不是有至少 n 个元素【英文标题】:Spark Check if there is At Least n element in datasetSpark 检查数据集中是否有至少 n 个元素 【发布时间】:2018-09-11 14:01:14 【问题描述】:

我正在使用 Spark (2.3.1) 对数据集进行一些处理。出于某种原因,我想在进行计算之前知道我的数据集中是否有足够的数据。

这样做的基本解决方案如下:

int count = myDataset.count();
int threshold = 100;

if (count>threshold)
    // compute
else
    System.out.println("Not enough data to do computation");

但它确实效率低下。另一个更有效的解决方案是使用 countApprox() 函数。

int count = (long) (myDataset.rdd().countApprox(1000,0.90).getFinalValue().mean());

但就我而言,它可能会更有效率。

解决这个问题的最佳方法是什么?

注意:

我正在考虑迭代我的数据,手动计算我的行数并在达到阈值时停止,但我不确定这是最好的解决方案。

【问题讨论】:

你的数据来源是什么? @nakeuh 你能检查一下答案,看看它是否适合你吗? 数据小于阈值的概率是多少?后续流程如何? myDataset 是如何创建的? 数据小于阈值的可能性很小但不可忽略。 myDataset 是从数据库中读取的数据集,映射很少(从时间戳中提取星期几,规范化列名,过滤一些行等......)。然后我使用这个数据集来提供一些机器学习算法(MLLIB 或其他),并且我只想在我有足够的输入数据的情况下生成我的 ML 模型。 【参考方案1】:

如果你做myDataset.count(),它会扫描完整的数据,可能会很慢。

为了加快速度,您可以对数据集执行limit(threshold+1)。这将返回另一个包含threshold+1 行的数据集。对此,你可以.count()

整数阈值 = 100; int totalRowsAfterLimit = myDataset.limit(threshold+1).count(); 如果(totalRowsAfterLimit > 阈值) // 计算 别的 System.out.println("没有足够的数据进行计算");

limit(threshold+1) 将确保您的基础作业只读取有限数量的记录,并且会更快地完成。

【讨论】:

【参考方案2】:

也许,“限制”可以更有效:

df.limit(threshold).count()

【讨论】:

以上是关于Spark 检查数据集中是不是有至少 n 个元素的主要内容,如果未能解决你的问题,请参考以下文章

spark 函数

检查给定字符串是不是等效于给定字符串集中的至少一个字符串的有效方法

python数据划分并使用卡方检验查看训练数据和测试数据的统计分布的合理性因为数据中有个别分类变量缺失稀有水平信息(频率为0)检查并补齐训练集和测试集中的水平(至少保证有1个)之后再进行卡方检验

如何检查一个元素是不是存在于 Django 查询集中?

如何检查列表的至少 n% 是不是包含某个值 x?

Dart 的 List 的“some”方法叫啥?检查至少一个元素是不是通过测试的方法