web-dev-qa-db-fra.com

Utilisez collect_list et collect_set dans Spark SQL

Selon le docs , le collect_set et collect_list les fonctions devraient être disponibles en Spark SQL. Cependant, je ne peux pas le faire fonctionner. J'exécute Spark 1.6.0 en utilisant un Image Docker .

J'essaie de faire ça à Scala:

import org.Apache.spark.sql.functions._ 

df.groupBy("column1") 
  .agg(collect_set("column2")) 
  .show() 

Et recevez l'erreur suivante lors de l'exécution:

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

A également essayé en utilisant pyspark, mais il échoue également. Les documents indiquent que ces fonctions sont des alias des UDAF Hive, mais je ne peux pas comprendre pour activer ces fonctions.

Comment régler ceci? Merci!

15
Joost Farla

Spark 2.0 + :

SPARK-10605 introduit natif collect_list et collect_set la mise en oeuvre. SparkSession avec support Hive ou HiveContext ne sont plus nécessaires.

INSTANTANÉ Spark 2.0 (avant 2016-05-03):

Vous devez activer le support Hive pour un SparkSession donné:

À Scala:

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

En Python:

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

Spark <2.0 :

Pour pouvoir utiliser les UDF Hive (voir https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF ) vous avez utilisé Spark built avec le support Hive (ceci est déjà couvert lorsque vous utilisez des binaires pré-construits ce qui semble être le cas ici) et initialisez SparkContext en utilisant HiveContext.

À 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)
33
zero323