代码之家  ›  专栏  ›  技术社区  ›  Chaouki

如何从Spark数据帧中的数组中获取统计信息?

  •  0
  • Chaouki  · 技术社区  · 6 年前

    我正在使用数据帧

        df.printSchema()
         root
           |-- key_value: struct (nullable = true)
           |    |-- key: string (nullable = true)
           |    |-- value: string (nullable = true)
        df.show(5)
        |key_value
        |[k1,v1]
        |[k1,v2]
        |[k2,v3
        |[k3,v6]
        |[k4,v5]
    

    我想获得数据帧中不同键的数量,所以我尝试使用explode构造一个包含列键和值的数据帧,但没有得到结果。

       val f=df.withColumn("k",explode(col("key_value")))
       org.apache.spark.sql.AnalysisException: cannot resolve 'explode(`key_value`)' due to data type mismatch: input to function explode should be array or map type, not StructType(StructField(key,StringType,true), StructField(value,StringType,true));;
    

    有什么帮助吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Mikel San Vicente    6 年前

    你可以这样做

    import spark.implicits._    
    df.select($"key_value.key").distinct.count
    

    这个 explode 函数应用于数组字段,在这种情况下 key_value key 是一个数组。