[英]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.