有没有办法在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) 你得到的价值。;
有没有办法做到这一点
答案 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。