web-dev-qa-db-ja.com

Spark SQLでcollect_listおよびcollect_setを使用します

docs によると、collect_setおよびcollect_list関数はSpark SQLで使用できるはずです。ただし、動作させることはできません。 Dockerイメージ を使用してSpark 1.6.0を実行しています。

私は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を使用して試しましたが、失敗しました。これらの機能はHive UDAFのエイリアスであるとドキュメントに記載されていますが、これらの機能を有効にする方法がわかりません。

これを修正する方法は?ありがとう!

15
Joost Farla

Spark 2.0 +

SPARK-10605 ネイティブcollect_listおよびcollect_set実装。 Hiveサポート付きのSparkSessionまたはHiveContextは不要になりました。

Spark 2.0-SNAPSHOT(2016-05-03以前)

特定のSparkSessionに対してHiveサポートを有効にする必要があります。

Scalaの場合:

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

Pythonの場合:

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

Spark <2.0

Hive UDF( https://cwiki.Apache.org/confluence/display/Hive/LanguageManual+UDF を参照)を使用できるようにするには、Spark built Hiveのサポート(これは、ビルド済みのバイナリを使用する場合は既にカバーされています)は、SparkContextを使用してHiveContextを初期化します。

Scalaの場合:

import org.Apache.spark.sql.Hive.HiveContext
import org.Apache.spark.sql.SQLContext

val sqlContext: SQLContext = new HiveContext(sc) 

Pythonの場合:

from pyspark.sql import HiveContext

sqlContext = HiveContext(sc)
33
zero323