2016-02-20 7 views
12

Entsprechend der docs, die collect_set und collect_list Funktionen sollten in Spark SQL verfügbar sein. Aber ich kann es nicht zur Arbeit bringen. Ich benutze Spark 1.6.0 mit einem Docker image.Verwenden Sie collect_list und collect_set in Spark SQL

Ich versuche, dies in Scala zu tun:

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

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

und den folgenden Fehler zur Laufzeit erhalten:

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

es auch versuchen pyspark verwenden, aber es funktioniert nicht auch. Die Dokumentation gibt an, dass diese Funktionen Aliase von Hive-UDAFs sind, aber ich kann diese Funktionen nicht aktivieren.

Wie behebt man das? Danke!

Antwort

29

Funken 2.0+:

SPARK-10605 eingeführt nativen collect_list und collect_set Umsetzung. SparkSession mit Hive-Unterstützung oder HiveContext sind nicht mehr erforderlich.

In Scala:

Spark-2.0-SNAPSHOT(vor 2016.05.03): Hive-Unterstützung aktivieren für eine gegebene SparkSession

Sie haben

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

In Python:

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

Funken < 2.0:

zu können Hive UDF verwenden (siehe https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF) Sie Funken gebaut mit Hive Unterstützung haben (dies bereits abgedeckt ist, wenn Sie vorgefertigte Binaries verwenden, was hier der Fall zu sein scheint) und initialisieren Sie SparkContext mit 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

und was 1.6.1 in Dokumenten sais es, dass avialable "@since 1.6.0" aber ich bin immer noch, dass Fehler –

+0

Hey @ zero323, ich versuche, die 'collect_list' Funktion in Spark 1.5.0 zu verwenden. Ich habe den Hive-Kontext erstellt, kann aber nicht herausfinden, wie die Funktion importiert wird. Dies kompiliert nicht: .groupBy (providerData ("PRVSEQ"), providerData ("PROV_NUM")) .agg (collect_list (regexp_replace (triggerReport ("match_type"), "_ (Individual | Practice) Model.", " "))) –

+0

@VijayRatnagiri Es wurde in 1.6 eingeführt. Soweit ich mich erinnere, sollten Sie in der Lage sein, Raw SQL-Abfrage in 1.5 auf registrierte temporäre Tabelle zu verwenden. – zero323

Verwandte Themen