火花,与步骤相加
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
我在 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 |