如何统计Spark DataFrame中不同Key的数量?使用explode报错求助
嘿,问题出在你用错函数啦!explode是用来处理数组(ArrayType)或者映射(MapType)类型数据的,而你的key_value是个结构体(StructType),所以Spark会抛出AnalysisException报错。
要统计不同key的数量,根本不需要用explode,直接提取结构体里的key字段就行,具体步骤如下:
1. 提取结构体中的key字段
你可以直接通过.操作符访问结构体的子字段,代码示例:
val dfWithKey = df.withColumn("key", col("key_value.key"))
执行后你的DataFrame会新增一列key,内容就是每个key_value结构体里的key值。
2. 统计不同key的数量
有两种常用实现方式:
方式一:用
countDistinct直接统计
先导入对应的函数,再执行查询:import org.apache.spark.sql.functions.countDistinct dfWithKey.select(countDistinct("key").alias("distinct_key_count")).show()基于你提供的示例数据,会输出如下结果:
+-----------------+ |distinct_key_count| +-----------------+ | 4| +-----------------+方式二:先去重再计数
如果只需要得到数字结果,也可以这么写:val distinctKeyCount = dfWithKey.select("key").distinct().count() println(distinctKeyCount) // 输出:4
当然你也可以一步到位,不用创建中间DataFrame:
import org.apache.spark.sql.functions.countDistinct df.select(countDistinct(col("key_value.key")).alias("distinct_key_count")).show()
这样就能完美解决你的问题啦!
内容的提问来源于stack exchange,提问作者Chaouki
相关产品推荐
相关产品推荐

