【问题标题】:ARRAY_AGG function does not work in Spark SQLARRAY_AGG 函数在 Spark SQL 中不起作用
【发布时间】:2023-02-03 09:58:15
【问题描述】:

我试图在 Spark SQL 中使用 ARRAY_AGG 函数。当我使用它时,它会抛出错误

<<未定义函数:'array_agg'。该函数既不是注册的临时函数,也不是注册在数据库'default>>中的永久函数

Dataset<Row> finalDS1 = sparkSession.sql("select array_agg(company_private_id) from TEMP_COMPANY_PRIVATE_VIEW");

任何人都知道如何解决它?我正在尝试将一个数组与另一列进行比较。为此,我正在使用 ARRAY_AGG。

"select cp.array_column & (select array_agg(int_column) from getCompanyPrivateDS ds1) as filtered_data from getCompanyPrivateDS cp"

【问题讨论】:

  • postgre 本机函数在spark.sql() 中不起作用。我认为 collect_list() 函数在这里做同样的事情。
  • @samkart 我不能使用与 collect_list 方法的交集,因为它不是数组。我想将一个数组列与 array_agg 的结果相交。
  • 就像我说的,postgre 本机方法在 spark.sql() 中不起作用。然而,它有自己的一套方法/功能可以做类似的事情。请阅读function doc了解更多。例如交集可以使用array_intersect完成
  • @samkart 我正在尝试使用 array_intersect。但它显示错误 <<Undefined function: 'array_intersect'。该函数既不是注册的临时函数,也不是数据库“default>>”中注册的永久函数。我正在使用 spark 3.3 版和 java 8 版。
  • 确保使用别名导入函数或模块。

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


【解决方案1】:

我认为这是 Spark 的文档错误。他们在函数列表中清楚地显示了 array_agg():https://spark.apache.org/docs/latest/api/sql/index.html#array_agg 但我也遇到过这个功能在 Spark 3.1.2 上不起作用

Collect_set() 和collect_list() 应该适合您的目的:前者的重复数据删除结果,而后者则没有。

【讨论】:

    猜你喜欢
    • 2016-03-21
    • 1970-01-01
    • 2015-06-29
    • 2016-07-08
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    相关资源
    最近更新 更多