apache-spark hive apache-spark-sql

apache spark - Use collect_list y collect_set en Spark SQL



apache-spark hive (1)

Spark 2.0+ :

SPARK-10605 introdujo la SPARK-10605 nativa collect_list y collect_set . SparkSession con soporte Hive o HiveContext ya no son necesarios.

Spark 2.0-SNAPSHOT (antes de 2016-05-03) :

SparkSession habilitar el soporte de Hive para una SparkSession determinada:

En Scala:

val spark = SparkSession.builder .master("local") .appName("testing") .enableHiveSupport() // <- enable Hive support. .getOrCreate()

En Python:

spark = (SparkSession.builder .enableHiveSupport() .getOrCreate())

Chispa <2.0 :

Para poder usar los UDF de Hive (consulte https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF ) debe usar Spark integrado con el soporte de Hive (esto ya está cubierto cuando usa binarios precompilados) parece ser el caso aquí) e inicialice SparkContext usando HiveContext .

En Scala:

import org.apache.spark.sql.hive.HiveContext import org.apache.spark.sql.SQLContext val sqlContext: SQLContext = new HiveContext(sc)

En Python:

from pyspark.sql import HiveContext sqlContext = HiveContext(sc)

Según los docs , las funciones collect_set y collect_list deberían estar disponibles en Spark SQL. Sin embargo, no puedo hacer que funcione. Estoy ejecutando Spark 1.6.0 usando una imagen Docker .

Estoy tratando de hacer esto en Scala:

import org.apache.spark.sql.functions._ df.groupBy("column1") .agg(collect_set("column2")) .show()

Y reciba el siguiente error en tiempo de ejecución:

Exception in thread "main" org.apache.spark.sql.AnalysisException: undefined function collect_set;

También lo probé usando pyspark , pero también falla. Los documentos indican que estas funciones son alias de Hive UDAF, pero no puedo entender para habilitar estas funciones.

¿Cómo arreglar esto? Gracias!