我使用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]
请参考此问题,以查看有关删除重复行的更多信息。