2016-02-20 25 views
12

'da top_listesi ve collect_set öğelerini kullanın docs'a göre, collect_set ve collect_list işlevleri Spark SQL'de bulunmalıdır. Ancak, onu işe alamıyorum. Spark 1.6.0'ı Docker image kullanarak çalıştırıyorum.Spark SQL

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

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

Ve zamanında aşağıdaki hatayı alırsınız::

ben Scala bunun çalışıyorum
Exception in thread "main" org.apache.spark.sql.AnalysisException: undefined function collect_set; 

Ayrıca pyspark kullanarak denedim, ama aynı zamanda başarısız olur. Dokümanlar, bu işlevlerin Hive UDAF'ların takma adları olduğunu belirtir, ancak bu işlevlerin etkinleştirileceğini anlayamıyorum.

Bunu nasıl düzeltebilirim? Thanx!

cevap

29

Spark 2.0 ve üzeri:

SPARK-10605 yerli collect_list ve collect_set uygulamasına başladık. Hive desteği veya HiveContext ile SparkSession artık gerekli değildir. Scala yılında

:

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

Belirli bir SparkSession için kovan desteğini etkinleştirmek zorunda

: (2016/05/03 önce)

Spark 2.0-SNAPSHOT Python'da:

Spark < 2.0:

Eğer kullanım Kıvılcım (burada durum görüneni önceden oluşturulmuş ikili kullanmaya ne zaman bu zaten kaplıdır Kovanı desteğiyle kurduk Hive UDF'leri (https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF bakınız) kullanabilmek için için) vekullanarak SparkContext'u başlatınız. Scala yılında

: Python

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

val sqlContext: SQLContext = new HiveContext(sc) 

:

from pyspark.sql import HiveContext 

sqlContext = HiveContext(sc) 
+0

ve ne Avialable "@since 1.6.0" olduğunu sais ama yine de o alıyorum belgelerde 1.6.1 hakkında hata –

+0

Hey @ zero323, Spark 1.5.0'da 'collect_list' işlevini kullanmaya çalışıyorum. Kovan bağlamını oluşturdum, ancak işlevi nasıl içe aktaracağımı anlayamıyorum. Bu derleme değil: .groupBy (providerData ("PRVSEQ"), providerData ("PROV_NUM")) .agg (collect_list (regexp_replace (triggerReport ("match_type"), "_ (Bireysel | Uygulama) Modeli.", " "))) –

+0

@VijayRatnagiri 1.6'da tanıtıldı. Hatırladığım kadarıyla kayıtlı SQL'de 1.5'te ham SQL sorgusunu kullanabilmelisiniz. – zero323

İlgili konular