Невозможно распознать оконную функцию в intellij - PullRequest
1 голос
/ 26 июня 2019

Невозможно распознать функцию avg и over в IntelliJ. Это говорит, что не может разрешить символ avg и более. Может кто-нибудь сказать, пожалуйста, какую библиотеку импортировать.

object DomainSpecificLanguage {
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "C:/winutils")
val spark = SparkSession.builder().appName("DomainSpecificLanguage").config("spark.master" , "local").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
import spark.implicits._
val empSalary =Seq(
  Salary("sales", 1, 5000),
  Salary("personnel", 2, 3900),
  Salary("sales", 3, 4800),
  Salary("sales", 4, 4800),
  Salary("personnel", 5, 3500),
  Salary("develop", 7, 4200),
  Salary("develop", 8, 6000),
  Salary("develop", 9, 4500),
  Salary("develop", 10, 5200),
  Salary("develop", 11, 5200)).toDS
val byDepName = Window.partitionBy('depName)
empSalary.withColumn("avg", avg('salary) over byDepName)
}

}

Ответы [ 2 ]

1 голос
/ 26 июня 2019

Вопрос: Невозможно распознать функцию avg и over в IntelliJ. Это говорит, что не может разрешить символ среднего и более. Может кто-нибудь сказать, пожалуйста какую библиотеку импортировать.

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

- это то, чего вам не хватает .. для функции avg

import org.apache.spark.sql.expressions.Window 

- импорт для Window.

см. Полный пример, который работает ...

  package com.examples

import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.expressions.Window

object DomainSpecificLanguage {
  def main(args: Array[String]): Unit = {
    System.setProperty("hadoop.home.dir", "C:/winutils")
    val spark = SparkSession.builder().appName("DomainSpecificLanguage").config("spark.master", "local").getOrCreate()
    spark.sparkContext.setLogLevel("ERROR")
    import spark.implicits._
    val empSalary = Seq(
      Salary("sales", 1, 5000),
      Salary("personnel", 2, 3900),
      Salary("sales", 3, 4800),
      Salary("sales", 4, 4800),
      Salary("personnel", 5, 3500),
      Salary("develop", 7, 4200),
      Salary("develop", 8, 6000),
      Salary("develop", 9, 4500),
      Salary("develop", 10, 5200),
      Salary("develop", 11, 5200)).toDS()
    val byDepName = Window.partitionBy('depName)
    import org.apache.spark.sql.functions._
    empSalary.withColumn("avg", avg('salary) over byDepName).show
  }

}

case class Salary(depName: String, deptnumber: Int, salary: Int)

Результат:

+---------+----------+------+-----------------+
|  depName|deptnumber|salary|              avg|
+---------+----------+------+-----------------+
|  develop|         7|  4200|           5020.0|
|  develop|         8|  6000|           5020.0|
|  develop|         9|  4500|           5020.0|
|  develop|        10|  5200|           5020.0|
|  develop|        11|  5200|           5020.0|
|    sales|         1|  5000|4866.666666666667|
|    sales|         3|  4800|4866.666666666667|
|    sales|         4|  4800|4866.666666666667|
|personnel|         2|  3900|           3700.0|
|personnel|         5|  3500|           3700.0|
+---------+----------+------+-----------------+


0 голосов
/ 26 июня 2019

Из следующих инструкций на этом сайте: https://jaceklaskowski.gitbooks.io/mastering-spark-sql/spark-sql-functions-windows.html

import org.apache.spark.sql.expressions.Window

В приведенном выше URL будет много других полезных советов по функциям Window.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...