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

数组列中所有元素的和

  •  0
  • vamsi  · 技术社区  · 4 年前

    我是spark新手,有一个用例来查找列中所有值的总和。每列都是一个整数数组。

    df.show(2,false)
    
    +------------------+
    |value             |
    +------------------+
    |[3,4,5]           |
    +------------------+
    |[1,2]             |
    +------------------+ 
    

    有人能帮助/指导我如何做到这一点吗?

    编辑:我必须在spark 2.3中运行此代码

    0 回复  |  直到 4 年前
        1
  •  2
  •   Vamsi Prabhala    4 年前

    一种选择是总结 array 然后计算总的和。这可以通过Spark SQL函数来实现 aggregate

    val tmp = df.withColumn("summed_val",expr("aggregate(val,0,(acc, x) -> acc + x)"))
    
    tmp.show()
    +---+---------+----------+
    | id|      val|summed_val|
    +---+---------+----------+
    |  1|[3, 4, 5]|        12|
    |  2|   [1, 2]|         3|
    +---+---------+----------+
    
    //one row dataframe with the overall sum. collecting to a scalar value is possible too.
    tmp.agg(sum("summed_val").alias("total")).show() 
    +-----+
    |total|
    +-----+
    |   15|
    +-----+
    

    explode

    import org.apache.spark.sql.functions.explode
    val tmp = df.withColumn("elem",explode($"val"))
    tmp.agg(sum($"elem").alias("total")).show()