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

rah*_*hul 2 scala bigdata apache-spark apache-spark-sql

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

val df = spark.read.json("//path")
df.createOrReplaceTempView("GETBYID")
Run Code Online (Sandbox Code Playgroud)

现在按如下方式分组:

val sqlDF = spark.sql(
  "SELECT count(customerId) FROM GETBYID group by customerId");
Run Code Online (Sandbox Code Playgroud)

但是当我尝试:

val sqlDF = spark.sql(
  "SELECT count(customerId),customerId,userId FROM GETBYID group by customerId");
Run Code Online (Sandbox Code Playgroud)

Spark给出一个错误:

org.apache.spark.sql.AnalysisException: 表达式 'getbyid. userId' 既不存在于 group by 中,也不是聚合函数。如果您不关心获得的值,请添加到 group by 或包装在 first() (或 first_value)中。

有没有办法做到这一点

Mar*_*usz 5

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

val sqlDF = spark.sql("SELECT count(customerId),customerId,userId FROM GETBYID group by customerId, userId");
Run Code Online (Sandbox Code Playgroud)

或使用first()

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