我在pySpark中有一个名为centroids
的非空的嵌套框架,我必须从中抽取一行,但是使用sample
我得到了一个空的嵌套框架。
我试着这样采样:
centroids.cache()
centroids.count()
sample_row = centroids.sample(withReplacement=False, fraction=1/centroids.count(),seed=42).limit(1)
但当我执行sample_row.count()
时,它返回0。我缓存了质心框架,并通过计数触发了操作,这也证实了框架是非空的(它有6行),那么可能是什么问题呢?
1条答案
按热度按时间zazmityj1#
在documentation of the sample function中,声明:
这不能保证精确地提供给定DataFrame的总计数的指定分数。
基本上,使用大小为
5
的 Dataframe 和1/5
的采样率,您将平均获得一条记录。您可以获得0条记录,1条记录,甚至多达5条记录。让我们用一个例子来说明这一点:正如你所看到的,平均一个,但很少正好是一个,有时是0。
如果你想随机取一条记录,你可以添加一个随机列,按该列排序,并像这样取第一条记录:
此外,如果您的质心是像
k-means
这样的随机算法的结果,那么只使用head()
就足够了。