在spark.sql中选择group by的多个元素

时间:2017-01-02 05:17:50

标签: scala apache-spark apache-spark-sql bigdata

有没有办法在sql spark中按表分组,选择多个元素 我正在使用的代码:

val df = spark.read.json("//path")
df.createOrReplaceTempView("GETBYID")

现在按照以下方式进行分组:

val sqlDF = spark.sql(
  "SELECT count(customerId) FROM GETBYID group by customerId");

但是当我尝试时:

val sqlDF = spark.sql(
  "SELECT count(customerId),customerId,userId FROM GETBYID group by customerId");

Spark给出错误:

  

org.apache.spark.sql.AnalysisException:expression'getbyid。userId'   既不存在于集团中,也不是集合函数。   如果您不关心,请添加到group by或wrap in first()(或first_value)   你得到的价值。;

有没有办法做到这一点

2 个答案:

答案 0 :(得分:3)

是的,这是可能的,您附加的错误消息描述了所有可能性。您可以将userId添加到groupBy:

val sqlDF = spark.sql("SELECT count(customerId),customerId,userId FROM GETBYID group by customerId, userId");

或使用first()

val sqlDF = spark.sql("SELECT count(customerId),customerId,first(userId) FROM GETBYID group by customerId");

答案 1 :(得分:0)

如果要保留所有出现的userId,可以执行以下操作:

spark.sql("SELECT count(customerId), customerId, collect_list(userId) FROM GETBYID group by customerId")

使用collect_list。