Использовать collect_list и collect_set в Spark SQL

В соответствии с docs функции collect_set и collect_list должны быть доступны в Spark SQL. Однако я не могу заставить его работать. Я запускаю Spark 1.6.0 с помощью Docker image.

Я пытаюсь сделать это в 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, но я не могу понять, как включить эти функции.

Как это исправить? Thanx!

Ответы

Ответ 1

Spark 2.0 +:

SPARK-10605 ввел встроенную реализацию collect_list и collect_set. SparkSession с поддержкой Hive или HiveContext больше не требуется.

Spark 2.0-SNAPSHOT (до 2016-05-03):

Вам нужно включить поддержку Hive для данного SparkSession:

В Scala:

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

В Python:

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

Spark & ​​lt; 2.0:

Чтобы использовать UUF для Hive (см. https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF), вы используете Spark, построенный с поддержкой 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)