Scala Spark:df.stat.sampleBy() 返回结果的差异

Gar*_*aso 4 scala apache-spark

看到strifiedSampling上贴了很多问题,但都没有回答我的问题,所以问为“新帖”,希望能得到一些更新。

我注意到 spark API:sampleBy() 返回的结果存在差异,这对于小型数据帧没有太大意义,但对于大型数据帧(> 1000 行)更为明显

示例代码:

val inputRDD:RDD[(Any,Row)] =df.rdd.keyBy(x=> x.get(0))
val keyCount = inputRDD.countByKey()
val sampleFractions = keyCount.map(x => (x._1,{(??  x._2.toDouble*sampleSize)/(totalCount*100)})).toMap
val sampleDF = df.stat.sampleBy(cols(0),fractions = sampleFractions,seed = 11L)
Run Code Online (Sandbox Code Playgroud)

数据帧总数:200 键数:A:16 B:91 C:54 D:39

分数:地图(A -> 0.08,B -> 0.455,C -> 0.27,D -> 0.195)

我只得到 69 行作为 df.stat.sampleBy() 的输出,尽管我已经指定了预期的样本大小是 100,当然这被指定为激发 API 的分数。

谢谢

小智 5

sampleBy不保证你会得到确切fractions的行。它需要一个样本,每个记录被包含的概率等于fractions。根据运行的不同,此值会有所不同,并且没有任何异常。