火花,与步骤相加

Spark, sum with step

我在 Spark 中有一列包含数据。我需要生成一个新的列或数组来总结某个步骤中的数字。

我的意思是:

A header
1
2
3
4
5
6
7
8

例如,我需要以 4 为增量获取所有数字的总和。然后我期望如下:

A header
10
26

接下来发生了,在第一行 - 1+2+3+4,在第二行 5+6+7+8(以 4 为增量对所有值求和)

使用您共享的顺序数据的数据,您可以运行在您的sparkSession 上进行以下查询,例如

my_df.createOrReplaceTempView("my_data")

my_transformed_data = sparkSession.sql("<insert sql here>")

SQL待用

    SELECT
        SUM(`A header`) as `A header`
    FROM
        my_data
    GROUP BY
         CAST((`A header`-1)/4 as INTEGER);

如果您想要求和的数据或数字不是连续的,您可以使用另一个具有相同逻辑的递增字段或使用 row_number 生成您自己的字段,例如

    WITH my_data_groups AS (
        SELECT
            `A header`,
            CAST((row_number() OVER (ORDER BY 1)-1)/4 AS INTEGER) as grp
        FROM
            my_data
    )
    SELECT
        SUM(`A header`) as `A header`
    FROM
        my_data_groups
    GROUP BY
         grp;

下面db-fiddle的结果 架构(SQLite v3.30)

CREATE TABLE my_data (
  `A header` INTEGER
);

INSERT INTO my_data
  (`A header`)
VALUES
  ('1'),
  ('2'),
  ('3'),
  ('4'),
  ('5'),
  ('6'),
  ('7'),
  ('8'),
  ('9'),
  ('10'),
  ('11'),
  ('12'),
  ('13')
  ;

查询#1

SELECT
    SUM(`A header`) as `A header`
FROM
    my_data
GROUP BY
     CAST((`A header`-1)/4 as INTEGER);
A header
10
26
42
13

查询#2

WITH my_data_groups AS (
    SELECT
        `A header`,
        CAST((row_number() OVER ()-1)/4 AS INTEGER) as grp
    FROM
        my_data
)
SELECT
    SUM(`A header`) as `A header`
FROM
    my_data_groups
GROUP BY
     grp;
A header
10
26
42
13

View on DB Fiddle