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!