2016-02-20 22 views
12

docsによれば、collect_setcollect_listの関数はSpark SQLで使用できるはずです。しかし、私はそれを働かせることはできません。私はDocker imageを使ってSpark 1.6.0を動かしています。spark SQLでcollect_listとcollect_setを使用

私はScalaでは、このやろうとしている:

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

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

をと、実行時に次のエラーが表示されます。

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

pysparkを使用して、それを試してみましたが、それも失敗します。これらの機能はハイブUDAFのエイリアスですが、これらの機能を有効にすることはできません。

これを修正するにはどうすればよいですか?ありがとう!

答えて

29

スパーク2.0+

SPARK-10605は、ネイティブcollect_listcollect_set実装を導入しました。 HiveをサポートするSparkSessionまたはHiveContextは必要ありません。

スパーク2.0-SNAPSHOT(2016年5月3日前):Scalaで

:あなたが与えられたSparkSession用ハイブのサポートを有効にする必要があり

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

Pythonで:

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

スパーク< 2.0:あなたは事前に構築されたバイナリを使用する場合

ハイブUDFを使用できるようにするには(https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDFを参照してください)あなたはハイブサポートで構築された使用火花を持っているが(これはすでにここケースのように思われるもの覆われています。 )HiveContextを使用してSparkContextを初期化します。 Scalaで

: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

とそれが接続可、 "@since 1.6.0" というSAIS私はまだことを取得していた文書で 1.6.1についてエラー –

+0

ちょっと@ zero323、私はスパーク1.5.0で 'collect_list'関数を使用しようとしています。私はハイブのコンテキストを作成しましたが、関数をインポートする方法を理解することはできません。これはコンパイルされません。.groupBy(providerData( "PRVSEQ")、providerData( "PROV_NUM")) .agg(collect_list(regexp_replace(triggerReport( "match_type")、 "_(Individual | Practice)Model"、 " "))) –

+0

@VijayRatnagiri 1.6で導入されました。私が知っている限り、登録されたテンポラリテーブルの1.5でraw SQLクエリを使用できるはずです。 – zero323

関連する問題