【问题标题】:select multiple elements with group by in spark.sql在 spark.sql 中使用 group by 选择多个元素
【发布时间】:2017-05-16 06:09:10
【问题描述】:

有没有办法在选择多个元素的 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: 表达式'getbyid.userId' 既不存在于 group by 中,也不是聚合函数。 如果您不关心,请添加到分组依据或包装在 first() (或 first_value)中 你得到什么价值。;

有什么办法可以做到吗

【问题讨论】:

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


    【解决方案1】:

    是的,这是可能的,您附加的错误消息描述了所有可能性。您可以将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");
    

    【讨论】:

      【解决方案2】:

      如果你想保留所有出现的 userId,你可以这样做:

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

      通过使用 collect_list。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-15
        • 1970-01-01
        • 2022-01-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-22
        • 2013-06-28
        相关资源
        最近更新 更多