2016-02-20 5 views
12

Zgodnie z docs funkcje collect_set i collect_list powinny być dostępne w Spark SQL. Jednak nie mogę go uruchomić. Używam Spark 1.6.0 przy użyciu Docker image.Użyj opcji collect_list i collect_set w Spark SQL

Staram się robić to w Scala:

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

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

I pojawia się następujący błąd w czasie wykonywania:

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

próbował go również za pomocą pyspark, ale to też nie. Dokumenty stwierdzają, że te funkcje są aliasami UDAFów Ula, ale nie mogę wymyślić, aby włączyć te funkcje.

Jak to naprawić? Thanx!

Odpowiedz

29

Spark 2.0+:

SPARK-10605 wprowadzono natywną collect_list i collect_set realizację. SparkSession z obsługą ula lub HiveContext nie są już wymagane.

Spark 2.0-SNAPSHOT(przed 03.05.2016):

Musisz włączyć Hive poparcie dla danej SparkSession:

W Scala:

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

W języku Python:

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

Spark < 2,0:

Aby móc korzystać Hive UDF (patrz https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF) masz stosowanie Spark zbudowany z Hive wsparcia (jest to już uwzględnione podczas korzystania z pre-zbudowane binarne, co wydaje się być w tym przypadku) i zainicjuj SparkContext przy użyciu HiveContext.

W Scala:

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

val sqlContext: SQLContext = new HiveContext(sc) 

W Pythonie:

from pyspark.sql import HiveContext 

sqlContext = HiveContext(sc) 
+0

i co 1.6.1 w dokumentach sais że avialable "@since 1.6.0", ale nadal jestem, że uzyskanie błąd –

+0

Hej @ zero323, Próbuję użyć funkcji "zbieraj listy" w Spark 1.5.0. Stworzyłem kontekst ula, ale nie mogę wymyślić, jak zaimportować funkcję. To nie kompiluje: .groupBy (providerData ("PRVSEQ"), providerData ("PROV_NUM")) .agg (collect_list (regexp_replace (triggerReport ("match_type"), "_ (Individual | Practice) Model.", " "))) –

+0

@VijayRatnagiri Zostało wprowadzone w 1.6. O ile dobrze pamiętam, powinieneś być w stanie użyć surowego zapytania SQL w 1.5 na zarejestrowanej tabeli tymczasowej. – zero323

Powiązane problemy