繁体   English   中英

spark如何获取广播数据帧的大小?

[英]How spark get the size of a dataframe for broadcast?

我设置了这个设置:-- --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)

我使用了这个功能:

  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操作,有点奇怪......,检查它是否适合您

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM