2016-02-20 24 views
12

In base allo docs, le funzioni collect_set e devono essere disponibili in Spark SQL. Tuttavia, non riesco a farlo funzionare. Sto usando Spark 1.6.0 usando un Docker image.Utilizzare collect_list e collect_set in Spark SQL

che sto cercando di fare questo a Scala:

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

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

E visualizzato il seguente errore in fase di esecuzione:

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

provato anche utilizzando pyspark, ma non riesce anche. I documenti affermano queste funzioni sono alias di alveare UDAFs, ma non riesco a capire per abilitare queste funzioni.

Come risolvere il problema? Grazie!

risposta

29

Spark 2.0+:

SPARK-10605 introdotto nativa implementazione collect_list e collect_set. SparkSession con supporto alveare o HiveContext non sono più necessari.

Spark 2.0-SNAPSHOT(prima del 2016/05/03):

Devi abilitare il supporto Hive per un dato SparkSession:

In Scala:

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

in Python:

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

Spark < 2.0:

Per poter utilizzare Hive UDF (vedi https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF) è stato l'uso Spark costruito con il supporto Hive (questo è già coperto quando si utilizzano i binari precompilati quello che sembra essere il caso qui) e inizializzate SparkContext utilizzando HiveContext.

In Scala:

import org.apache.spark.sql.hive.HiveContext 
import org.apache.spark.sql.SQLContext 

val sqlContext: SQLContext = new HiveContext(sc) 

In Python:

from pyspark.sql import HiveContext 

sqlContext = HiveContext(sc) 
+0

e che dire 1.6.1 nei documenti si sais che avialable "@SINCE 1.6.0", ma io sono ancora ottenere che errore di –

+0

Hey @ zero323, sto cercando di utilizzare la funzione 'collect_list' in Spark 1.5.0. Ho creato il contesto dell'alveare, ma non riesco a capire come importare la funzione. Questo non viene compilato: .groupBy (providerData ("PRVSEQ"), providerData ("PROV_NUM")) .agg (collect_list (regexp_replace (triggerReport ("match_type"), "_ (Individual | Practice) Model.", " "))) –

+0

@VijayRatnagiri E 'stato introdotto nel 1.6. Per quanto mi ricordo dovresti essere in grado di utilizzare la query SQL raw in 1.5 sulla tabella temporanea registrata. – zero323

Problemi correlati