多于计算一列中有多少特征,这个就直接distinct再count一下就出来了,但是对于指定的多列进行操作,如果使用循环操作,那效率,简直了。。。对于这么一种情况,我们可以使用spark的approx_count_distinct函数来操作。
val df = Seq((1,3,4),(1,2,3),(2,3,4),(2,3,5)).toDF("col1","col2","col3")
val exprs = df.columns.map((_ -> "approx_count_distinct")).toMap
df.agg(exprs).show()
// +---------------------------+---------------------------+---------------------------+
// |approx_count_distinct(col1)|approx_count_distinct(col2)|approx_count_distinct(col3)|
// +---------------------------+---------------------------+---------------------------+
// | 2| 2| 3|
// +---------------------------+---------------------------+---------------------------+