Apache spark 在spark 2.0中,数据帧的GroupBy操作需要花费大量时间
在我的一个spark工作(EMR5.0.0上的2.0)中,我有大约5GB的数据,这些数据与30行交叉连接(数据大小为几MB)。我还需要按它分组。我注意到我花了很多时间(大约4个小时,一个m3.xlarge主节点和六个m3.2xlarge核心节点)。处理总共花了2小时,将数据写入s3又花了2小时。 所花的时间对我来说不是很深刻。我试着在网上搜索,发现了一个链接,上面说groupBy导致了很多混乱。它还建议,为了避免大量的混乱,应该使用ReduceByKey,因为ReduceByKey数据是组合在一起的,所以每个分区最多为每个密钥输出一个值,以便通过网络发送。而使用groupByKey进行洗牌时,所有数据都会通过网络进行浪费性发送,并在reduce workers上进行收集。 然而,spark数据帧中没有reduceByKey的直接API。您需要将dataFrame转换为RDD,然后执行reduceByKey。 所以问题是—— 1.是否有人面临类似的问题?采取了哪些措施来提高绩效? 2.我选择的机器不对吗? 3.spark 2.0中的GroupBy已经在进行类似reduceByKey的优化,因此reduceByKey不需要作为DataFrame API 下面是groupBy的代码-Apache spark 在spark 2.0中,数据帧的GroupBy操作需要花费大量时间,apache-spark,spark-dataframe,emr,amazon-emr,Apache Spark,Spark Dataframe,Emr,Amazon Emr,在我的一个spark工作(EMR5.0.0上的2.0)中,我有大约5GB的数据,这些数据与30行交叉连接(数据大小为几MB)。我还需要按它分组。我注意到我花了很多时间(大约4个小时,一个m3.xlarge主节点和六个m3.2xlarge核心节点)。处理总共花了2小时,将数据写入s3又花了2小时。 所花的时间对我来说不是很深刻。我试着在网上搜索,发现了一个链接,上面说groupBy导致了很多混乱。它还建议,为了避免大量的混乱,应该使用ReduceByKey,因为ReduceByKey数据是组合在一
val aggregtedDF: DataFrame = joinedDFWithOtherDfs.groupBy("Col1", "Col2").agg(min("Col3").alias("Col3"))