根据docs,collect_set
和collect_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的别名,但我无法弄清楚是否能够启用这些函数。
如何解决这个问题?感谢名单!
答案 0 :(得分:32)
Spark 2.0 + :
SPARK-10605引入了原生collect_list
和collect_set
实施。 1}}不再需要Hive支持或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