当前位置: 首页 > 知识库问答 >
问题:

如何估计Spark DataFrame中每列的字节大小?

潘宸
2023-03-14

我通常使用PySpark,所以PySpark的答案更好,但Scala也很好。

共有1个答案

束俊英
2023-03-14

我找到了一个基于此相关答案的解决方案:https://stackoverflow.com/a/49529028。

假设我正在使用一个名为df的dataframe和一个名为sparkspark对象:

import org.apache.spark.sql.{functions => F}

// force the full dataframe into memory (could specify persistence
// mechanism here to ensure that it's really being cached in RAM)
df.cache()
df.count()

// calculate size of full dataframe
val catalystPlan = df.queryExecution.logical
val dfSizeBytes = spark.sessionState.executePlan(catalystPlan).optimizedPlan.stats.sizeInBytes

for (col <- df.columns) {
    println("Working on " + col)

    // select all columns except this one:
    val subDf = df.select(df.columns.filter(_ != col).map(F.col): _*)

    // force subDf into RAM
    subDf.cache()
    subDf.count()

    // calculate size of subDf
    val catalystPlan = subDf.queryExecution.logical
    val subDfSizeBytes = spark.sessionState.executePlan(catalystPlan).optimizedPlan.stats.sizeInBytes

    // size of this column as a fraction of full dataframe
    val colSizeFrac = (dfSizeBytes - subDfSizeBytes).toDouble / dfSizeBytes.toDouble
    println("Column space fraction is " + colSizeFrac * 100.0 + "%")
    subDf.unpersist()
}

一些证实这种方法给出了合理的结果:

    null
 类似资料:
  • 问题内容: 我在pyspark中使用sqlContext.sql函数读取了一个数据框。它包含4个数字列,每个客户都有信息(这是键ID)。我需要计算每个客户端的最大值并将此值加入数据框: 在这种情况下,客户端“ six”的最大值为23,而客户端“ ten”的最大值为30。“ null”在新列中自然为null。 请帮助我显示如何执行此操作。 问题答案: 我认为将值组合到列表中而不是找到最大值将是最简单

  • 我每一步都能得到训练损失。但我确实想在tensorboard中的图'lossxx'中添加评估损失。怎么做?

  • 本文向大家介绍极大似然估计和最小二乘估计的关系?相关面试题,主要包含被问及极大似然估计和最小二乘估计的关系?时的应答技巧和注意事项,需要的朋友参考一下 极大似然的估计的概念是最大化样本出现概率,即目标函数为似然函数,而最小二乘估计是为了最小化样本预测值与真实值之间的距离,即最小化估计值和预测值差的平方和,当似然函数为高斯函数时两者相同

  • 我已经反汇编了一个用MSVC v140编译的小型C程序,并试图估计每条指令的周期,以便更好地理解代码设计如何影响性能。我一直在关注迈克·阿克顿(MikeActon)关于“面向数据的设计和C”的CppCon 2014演讲,特别是我链接到的部分。 他在信中指出了以下几行: 然后他声称,这些2 x 32位读取可能位于同一缓存线上,因此大约需要200个周期。 《英特尔64和IA-32体系结构优化参考手册》

  • 给定随机变量的分布和未知参数,利用观测到的样本计算似然函数。 选择最大似然函数的参数作为参数的估计量。 最大似然估计的基本原理:极大化似然函数 假设样本{$$X_1,X_2,...X_n$$}服从概率密度函数$$f_\theta(x)$$,其中$$\theta=(\theta_1,\theta_2,....\theta_k)$$是未知参数。 当固定x的时候,$$f_\theta(x)$$就是$$\

  • 问题内容: 哟,所以我试图制作一个程序,可以接受用户输入的字符串,例如:“一次一次”,然后报告该字符串包含多少个大写和小写字母: 输出示例:字符串具有8个大写字母,字符串具有5个小写字母,即时消息应该使用字符串类而不是数组,有关如何开始使用此字符串的任何提示?在此先感谢,这是我到目前为止所做的:D! 问题答案: 只需创建发现小写或大写字母时递增的计数器,如下所示: