我每天使用Spark scala程序从Mysql向Hive导入1000万条记录,并比较昨天和今天数据集的数据集。
val yesterdayDf=sqlContext.sql("select * from t_yesterdayProducts");
val todayDf=sqlContext.sql("select * from t_todayProducts");
val diffDf=todayDf.except(yesterdayDf);
我正在使用3节点集群和程序正常工作400万条记录。 由于RAM内存不足,我们面临超出400万的内存问题。
我想知道比较两个大数据集的最佳方法。
答案 0 :(得分:2)
您是否尝试了解有多少分区:
yesterdayDf.rdd.partitions.size
将为您提供todayDf数据帧的信息,您也可以对其他数据帧执行相同的操作。
您也可以使用
yesterdayDf.repartition(1000) // (a large number)
看看OOM问题是否消失。
答案 1 :(得分:0)
这个问题的原因很难说。但问题可能是由于某些原因,工人们收集了太多数据。尝试清除数据框以执行除外。根据我在评论中的问题,你说你有关键列,所以只需要这样:
val yesterdayDfKey = yesterdayDf.select("key-column")
val todayDfKey = todayDf.select("key-column")
val diffDf=todayDfKey.except(yesterdayDfKey);
然后,您将使用键获取数据框。你可以使用像post这样的连接来制作过滤器。
答案 2 :(得分:0)
你还需要确保你的yarn.nodemanager.resource.memory-mb比你的--executor-memory大。