복붙노트

[SCALA] 매개 변수 값 스칼라 - 스파크 동적으로 호출 GROUPBY 및 AGG

SCALA

매개 변수 값 스칼라 - 스파크 동적으로 호출 GROUPBY 및 AGG

나는 열 이름을 알고 집계 앞을 매핑되지 않는 map.I 집계 지정된 사용자 지정 열 이름과 사용자가 얻을 수있는 사용자 정의 그룹화 및 집계 함수를 작성합니다. 나는 다음과 같은 유사한 함수를 작성합니다. 하지만 난 스칼라에 새로운 오전 나는 그것을 해결할 수 없습니다.

def groupAndAggregate(df: DataFrame,  aggregateFun: Map[String, String], cols: List[String] ): DataFrame ={
  val grouped = df.groupBy(cols)
  val aggregated = grouped.agg(aggregateFun)
  aggregated.show()
}

과 같이 호출 할

val listOfStrings =  List("A", "B", "C")
val result = groupAndAggregate(df, Map("D"-> "SUM", "E"-> "COUNT"), listOfStrings)

나는이 어떻게 할 수 있습니까? 나를 기쁘게 사람의 도움을 할 수 있습니다.

해결법

  1. ==============================

    1.두 가지 문제 - 코드는 거의 정확

    두 가지 문제 - 코드는 거의 정확

    전부, 당신의 기능은 다음과 같습니다

    def groupAndAggregate(df: DataFrame,  aggregateFun: Map[String, String], cols: List[String] ): DataFrame ={
      val grouped = df.groupBy(cols.head, cols.tail: _*)
      val aggregated = grouped.agg(aggregateFun)
      aggregated
    }
    

    또는 유사한 짧은 버전 :

    def groupAndAggregate(df: DataFrame,  aggregateFun: Map[String, String], cols: List[String] ): DataFrame = {
      df.groupBy(cols.head, cols.tail: _*).agg(aggregateFun)
    }
    

    당신은 당신의 함수 내에서 쇼를 호출 할 경우 :

    def groupAndAggregate(df: DataFrame,  aggregateFun: Map[String, String], cols: List[String] ): DataFrame ={
      val grouped = df.groupBy(cols.head, cols.tail: _*)
      val aggregated = grouped.agg(aggregateFun)
      aggregated.show()
      aggregated
    }
    
  2. from https://stackoverflow.com/questions/36307867/scala-spark-dynamically-call-groupby-and-agg-with-parameter-values by cc-by-sa and MIT license