问题描述:
程序的逻辑是使用pyflink SQL 批处理读取Clickhouse的宽表,用sql做基本的逻辑处理后转pandas dataframe结构做数据聚合运算,像平均值、最大值最小值
中间使用了for循环,每次处理的数据量不算大。但是每次跑着跑着就内存溢出了。(机器资源也十分有限,多个服务在上面跑,每次跑时可用内存大概6G,跑一会就基本爆了)
环境描述:搭建的jupyter-basenotebook的容器,公用宿主机的资源。
最主要是思考内存不释放的问题。
1.批量大数据使用了for循环
2.pandas dataframe group by之后使用了apply
3.数据占内存太大
排查过程:
每次报错的代码是这句flated_pd = flated_table.to_pandas()
猜测是flink table转pandas耗内存。
解决方法尝试:
1.使用del 删除对象,使用gc.collect()垃圾回收,效果不明显
2.降低dataframe的内存空间,从打印的占用来看占比下降但问题仍然存在
3.聚合运算,像平均值、最大值最小值这些由flink sql来完成。其他逐行处理的代码修改为udf函数实现。
这个方法有一定的效果,一次能执行的维度多了&#