通过在现有行Spark -SQL上进行组进行组



我使用MySQL作为存储引擎从Spark SQL中保存表。我的桌子看起来像

+-------------+----------+
|        count|      date|
+-------------+----------+
|           72|2017-09-08|
|           84|2017-09-08|
+-------------+----------+

我想通过使用组添加计数并删除单个行来更新表。所以我的输出应该像

 +-------------+----------+
 |        count|      date|
 +-------------+----------+
 |          156|2017-09-08|
 +-------------+----------+

这是正确的期望吗?如果可能的话,使用Spark SQL可以实现它?

在将表写入 MYSQL之前,请在 spark dataframe/dataset

中应用以下逻辑
import org.apache.spark.sql.functions._
df.groupBy("date").agg(sum("count").as("count"))

并将转换的dataframe写入MYSQL

soln 1

在MySQL中,您可以使用TEMPORARY TABLE在分组后存储结果。

然后截断原始表。现在插入从临时表到原始表的数据。

CREATE TEMPORARY TABLE temp_table
AS
(SELECT SUM(count) as count, [date] from table_name GROUP BY [date]);
TRUNCATE TABLE table_name;
INSERT INTO table_name (count,[date])
SELECT (count,[date]) from temp_table;
DROP TEMPORARY TABLE temp_table;

soln 2

使用以下查询更新行。

UPDATE table_name t 
INNER JOIN 
(SELECT sum(count) as [count], [date] FROM table_name GROUP BY [date]) t1 
ON t.[date] = t1.[date]
SET t.[count] = t1.[count]

假设该表具有名为uid的唯一列,

DELETE t1 FROM table_name t1, table_name t2 
WHERE t1.uid > t2.uid AND t1.[date] = t2.[date]

请参考此问题,以查看有关删除重复行的更多信息。

相关内容

  • 没有找到相关文章