0

我设置了这个设置:--conf spark.sql.autoBroadcastJoinThreshold=209715200 //200mb

我想把这个数量减少到比特定的数据帧高一点(让我们称之为bdrDf

我试图估计bdrDf

import org.apache.commons.io.FileUtils

val bytes = sparkSession.sessionState.executePlan(bdrDf.queryExecution.logical)
.optimizedPlan.stats(sparkSession.sessionState.conf).sizeInBytes

println("bdrDfsize mb:" + FileUtils.byteCountToDisplaySize(bytes.toLong))

我有 :58 MB

这是 Spark 在检查数据帧是否低于或不低于时将获得的大小spark.sql.autoBroadcastJoinThreshold

我还看到了 sparkUI 的这个指标:

在此处输入图像描述

它对应于492 MB

我的价值观之一是否正确?如果没有,如何估计我的数据框的大小?

代码:

val Df= readFromHive()      
import org.apache.commons.io.FileUtils     

def checkSize(df: DataFrame)(implicit spark: SparkSession) = {       
  df.cache.foreach(el => el)       
  val catalyst_plan = df.queryExecution.logical

 val df_size_in_bytes = spark.sessionState.executePlan(catalyst_plan).optimizedPlan.stats(sparkSession.sessionState.conf).sizeInBytes

 logger.info("size in mO:" + 
   FileUtils.byteCountToDisplaySize(df_size_in_bytes.toLong))       
 logger.info("size bytes:" + df_size_in_bytes)     

}     

checkSize(Df)
4

1 回答 1

0

我使用了这个功能:

  def checkSize(df: DataFrame)(implicit spark: SparkSession) = {
    df.cache.foreach(el => el)
    val catalyst_plan = df.queryExecution.logical
    val df_size_in_bytes = spark.sessionState.executePlan(
      catalyst_plan).optimizedPlan.statistics.sizeInBytes
    df_size_in_bytes
  }

使用这种方法是强制缓存 df 的,因为它是一个惰性操作,你需要执行foreach操作,有点奇怪......,检查它是否适合你

于 2021-11-16T11:32:59.610 回答