복붙노트

[SCALA] 스파크 / 스칼라 dataframe에서의 하나 개의 컬럼의 값을 합산하는 방법

SCALA

스파크 / 스칼라 dataframe에서의 하나 개의 컬럼의 값을 합산하는 방법

타임 스탬프, 단계, 심장 박동 등 : 나는 같은 많은 열이있는 CSV 파일에서 읽을 수있는 Dataframe이

나는 "단계"열 예를 들어, 단계의 총 수를 각 열의 값을 합계를.

지금까지 나는 기능의 이러한 종류를 사용하려면 참조로 : http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.functions$

하지만 함수의 합을 사용하는 방법을 이해할 수있다.

때 나는 다음 쓰기 :

val df = CSV.load(args(0))
val sumSteps = df.sum("steps") 

함수 합계가 해결 될 수 없다.

내가 잘못 함수 합계를 사용하십니까? 마 Ι 먼저 기능 맵을 사용할 필요가? 어떻게 네 경우?

간단한 예는 매우 도움이 될 것입니다! 최근 스칼라를 쓰기 시작했다.

해결법

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

    1.당신은 하나 개의 컬럼의 모든 값을 합계를 경우 DataFrame의 내부 RDD를 사용하고 감소하는 것이 더 효율적입니다.

    당신은 하나 개의 컬럼의 모든 값을 합계를 경우 DataFrame의 내부 RDD를 사용하고 감소하는 것이 더 효율적입니다.

    import sqlContext.implicits._
    import org.apache.spark.sql.functions._
    
    val df = sc.parallelize(Array(10,2,3,4)).toDF("steps")
    df.select(col("steps")).rdd.map(_(0).asInstanceOf[Int]).reduce(_+_)
    
    //res1 Int = 19
    
  2. ==============================

    2.먼저 기능을 가져와야합니다 :

    먼저 기능을 가져와야합니다 :

    import org.apache.spark.sql.functions._
    

    그럼 당신은 다음과 같이 사용할 수 있습니다 :

    val df = CSV.load(args(0))
    val sumSteps =  df.agg(sum("steps")).first.get(0)
    

    필요한 경우 또한 결과를 캐스팅 할 수 있습니다 :

    val sumSteps: Long = df.agg(sum("steps").cast("long")).first.getLong(0)
    

    편집하다:

    여러 열 (예를 들어, "COL1", "COL2", ...)의 경우, 한 번에 모든 집계를 얻을 수 있습니다 :

    val sums = df.agg(sum("col1").as("sum_col1"), sum("col2").as("sum_col2"), ...).first
    

    Aaditi :

    동적 집계를 적용 할 경우, 다음 옵션을 사용할 수 있습니다 :

    df.groupBy().sum()
    
    val columnNames = List("col1", "col2")
    df.groupBy().sum(columnNames: _*)
    
    val cols = List("col1", "col2")
    val sums = cols.map(colName => sum(colName).cast("double").as("sum_" + colName))
    df.groupBy().agg(sums.head, sums.tail:_*).show()
    
  3. ==============================

    3.단순히 열을 집계 기능, 합계를 적용

    단순히 열을 집계 기능, 합계를 적용

    df.groupby('steps').sum().show()
    

    문서 http://spark.apache.org/docs/2.1.0/api/python/pyspark.sql.html에 따라

    이 링크 https://www.analyticsvidhya.com/blog/2016/10/spark-dataframe-and-operations/을 확인

  4. ==============================

    4.이 질문에 질문하지만 때 확실하지이 주변에 :

    이 질문에 질문하지만 때 확실하지이 주변에 :

    df.describe().show("columnName")
    

    평균, 수, 열에 stdtev 통계를 제공한다. 내가) (당신이 단지 .show 할 경우 모든 열을 반환 생각

  5. ==============================

    5.이 사람이 도움이된다면 경우에 불꽃 SQL query..just를 사용!

    이 사람이 도움이된다면 경우에 불꽃 SQL query..just를 사용!

    import org.apache.spark.sql.SparkSession 
    import org.apache.spark.SparkConf 
    import org.apache.spark.sql.functions._ 
    import org.apache.spark.SparkContext 
    import java.util.stream.Collectors
    
    val conf = new SparkConf().setMaster("local[2]").setAppName("test")
    val spark = SparkSession.builder.config(conf).getOrCreate()
    val df = spark.sparkContext.parallelize(Seq(1, 2, 3, 4, 5, 6, 7)).toDF()
    
    df.createOrReplaceTempView("steps")
    val sum = spark.sql("select  sum(steps) as stepsSum from steps").map(row => row.getAs("stepsSum").asInstanceOf[Long]).collect()(0)
    println("steps sum = " + sum) //prints 28
    
  6. from https://stackoverflow.com/questions/37032025/how-to-sum-the-values-of-one-column-of-a-dataframe-in-spark-scala by cc-by-sa and MIT license