spark read functions example apache-spark apache-spark-sql spark-dataframe

apache spark - read - Uso de funciones de ventana en Spark



spark sql functions (2)

Para Spark 2.0, se recomienda utilizar SparkSession como punto de entrada único. Elimina el problema de confusión de HiveContext / SqlContext .

import org.apache.spark.sql.SparkSession val session = SparkSession.builder .master("local") .appName("application name") .getOrCreate()

Echa un vistazo a este artículo de datos sobre cómo usarlo.

Estoy tratando de usar rowNumber en marcos de datos Spark. Mis consultas funcionan como se esperaba en Spark shell. Pero cuando los escribo en eclipse y compilo un jar, me enfrento a un error

16/03/23 05:52:43 ERROR ApplicationMaster: User class threw exception:org.apache.spark.sql.AnalysisException: Could not resolve window function ''row_number''. Note that, using window functions currently requires a HiveContext; org.apache.spark.sql.AnalysisException: Could not resolve window function ''row_number''. Note that, using window functions currently requires a HiveContext;

Mis consultas

import org.apache.spark.sql.functions.{rowNumber, max, broadcast} import org.apache.spark.sql.expressions.Window val w = Window.partitionBy($"id").orderBy($"value".desc) val dfTop = df.withColumn("rn", rowNumber.over(w)).where($"rn" <= 3).drop("rn")

No estoy usando HiveContext mientras ejecuto las consultas en spark shell. No estoy seguro de por qué está devolviendo un error cuando ejecuto lo mismo que un archivo jar. Y también estoy ejecutando las secuencias de comandos en Spark 1.6.0 si eso ayuda. ¿Alguien se enfrenta a un problema similar?


Ya he respondido una pregunta similar antes. El mensaje de error dice todo. Necesitarás un HiveContext en tu contenedor de aplicaciones, no hay otro camino

Puede leer más sobre la diferencia entre SQLContex y HiveContext aquí .

SparkSQL tiene un SQLContext y un HiveContext. HiveContext es un súper conjunto de SQLContext. La comunidad Spark sugiere usar HiveContext. Puede ver que cuando ejecuta spark-shell, que es su aplicación de controlador interactivo, crea automáticamente un SparkContext definido como sc y un HiveContext definido como sqlContext. HiveContext le permite ejecutar consultas SQL así como comandos de Hive.

Puedes intentar verificar que dentro de tu spark-shell :

Welcome to ____ __ / __/__ ___ _____/ /__ _/ // _ // _ `/ __/ ''_/ /___/ .__//_,_/_/ /_//_/ version 1.6.0 /_/ Using Scala version 2.10.5 (Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0_74) scala> sqlContext.isInstanceOf[org.apache.spark.sql.hive.HiveContext] res0: Boolean = true scala> sqlContext.isInstanceOf[org.apache.spark.sql.SQLContext] res1: Boolean = true scala> sqlContext.getClass.getName res2: String = org.apache.spark.sql.hive.HiveContext

Por herencia, HiveContext es en realidad un SQLContext , pero no es cierto al revés. Puede verificar el código fuente si está más HiveContext en saber cómo hereda SQLContext de SQLContext .