在Spark SQL中使用collect_list和collect_set

时间:2016-02-20 21:01:30

标签: apache-spark hive apache-spark-sql

根据docscollect_setcollect_list函数应该在Spark SQL中可用。但是,我无法让它发挥作用。我使用Docker image运行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的别名,但我无法弄清楚是否能够启用这些函数。

如何解决这个问题?感谢名单!

1 个答案:

答案 0 :(得分:32)

Spark 2.0 +

SPARK-10605引入了原生collect_listcollect_set实施。 SparkSession。

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

您必须为给定的HiveContext启用Hive支持:

在Scala中:

SparkSession

在Python中:

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

Spark&lt; 2.0

为了能够使用Hive UDF(请参阅https://cwiki.apache.org/confluence/display/Hive/LanguageManual+UDF),您已经使用了使用Hive支持构建的Spark(当您使用预构建的二进制文件时已经涵盖了这种情况),并初始化{{ 1}}使用spark = (SparkSession.builder .enableHiveSupport() .getOrCreate())

在Scala中:

SparkContext

在Python中:

HiveContext