gpt4 book ai didi

apache-spark - Apache spark 中的数据帧示例 |斯卡拉

转载 作者:行者123 更新时间:2023-12-03 11:49:18 24 4
gpt4 key购买 nike

我正在尝试从两个数据帧中取出样本,其中我需要保持计数的比率。例如

df1.count() = 10
df2.count() = 1000

noOfSamples = 10

我想以这样的方式对数据进行采样,以便我得到 10 个大小为 101 的样本(1 个来自 df1,100 个来自 df2)

现在,在这样做的同时,
var newSample = df1.sample(true, df1.count() / noOfSamples)
println(newSample.count())

这里的分数意味着什么?它可以大于1吗?我查了 thisthis但无法完全理解。

还有无论如何我们可以指定要采样的行数吗?

最佳答案

fraction参数代表近似 将返回的数据集的一部分。例如,如果您将其设置为 0.1 , 10% (1/10) 的行将被返回。对于您的情况,我相信您想要执行以下操作:

val newSample = df1.sample(true, 1D*noOfSamples/df1.count)

但是,您可能会注意到 newSample.count每次运行都会返回不同的数字,这是因为 fraction将是随机生成值的阈值(如您所见 here ),因此生成的数据集大小可能会有所不同。解决方法可以是:
val newSample = df1.sample(true, 2D*noOfSamples/df1.count).limit(df1.count/noOfSamples)

一些可扩展性观察

你可能会注意到做一个 df1.count因为它评估整个 DataFrame 可能很昂贵,而且您首先会失去采样的一个好处。

因此,根据您的应用程序的上下文,您可能希望使用已经 已知 总样本数或近似值。
val newSample = df1.sample(true, 1D*noOfSamples/knownNoOfSamples)

或者假设您的 DataFrame 的大小很大,我仍然会使用 fraction并使用 limit强制采样数。
val guessedFraction = 0.1
val newSample = df1.sample(true, guessedFraction).limit(noOfSamples)

至于您的问题:

can it be greater than 1?



不。它表示 0 和 1 之间的一个分数。如果将其设置为 1,它将带来 100% 的行,因此将其设置为大于 1 的数字没有意义。

Also is there anyway we can specify the number of rows to be sampled?



您可以指定比所需行数更大的分数,然后使用限制,如我在第二个示例中所示。也许还有另一种方法,但这是我使用的方法。

关于apache-spark - Apache spark 中的数据帧示例 |斯卡拉,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37416825/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com