apache-spark - 如何在 Spark SQL 中分割一串数字并取其平均值?

标签 apache-spark apache-spark-sql

我的数据集中有一列包含一串数值。我想分割它并使用 Sqark SQL 计算它的平均值

"[0.0895298943, 0.0794019, 0.07463462, 0.0538841, 0.0266057681, 0.03875145, 0.0308785159]"

我知道如何分割它,但我想将值更改为数字(浮点),并计算该序列的平均值。

SELECT split(FFTData,',') as VarN from dataset 

任何帮助将不胜感激。

最佳答案

拆分后,您可以将生成的字符串数组转换为 float 数组,然后使用 aggregate计算平均值的函数:

spark.sql("""
    SELECT  VarN,
            AGGREGATE(VarN, 0D, (acc, x) -> acc + x, acc -> acc / SIZE(VarN)) AS VarN_Avg
    FROM    (
        SELECT  CAST(SPLIT(FFTData, ',') AS ARRAY<FLOAT>) AS VarN
        FROM    dataset
    )
""").show(false)

//+-------------------------------------------------------------------------------------+--------------------+
//|VarN                                                                                 |VarN_Avg            |
//+-------------------------------------------------------------------------------------+--------------------+
//|[0.089529894, 0.0794019, 0.07463462, 0.0538841, 0.026605768, 0.03875145, 0.030878516]|0.056240892836025784|
//+-------------------------------------------------------------------------------------+--------------------+

关于apache-spark - 如何在 Spark SQL 中分割一串数字并取其平均值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69856763/

相关文章:

apache-spark - spark DAG 中的 shufflequerystage 是什么?

apache-spark - 黑斑羚与 SparkSQL : built-in function translation: fnv_hash

java - Eclipse:Apache Spark 2.1.1,org.apache.spark.logging 无法解析

apache-spark - Spark联合列顺序

python - DataFrame 的多个联合是否有效?

scala - Spark DeltaLake Upsert(合并)抛出 "org.apache.spark.sql.AnalysisException"

amazon-web-services - 在 Spark 中,在 CSV 和 JSON 上查询数据帧之间是否存在性能差异

Hadoop:两个数据节点,但 UI 显示一个和 Spark:两个工作人员 UI 显示一个

apache-spark - 将 Spark-Streaming 的更改部署到生产的过程

apache-spark - Spark数据框中的列值比较