如何计算数据框行大小作为Mongo文档以作为输入发送给Mongo Spark Connector

时间:2018-07-29 17:55:07

标签: mongodb apache-spark

我想将数据帧传递为spark mongo连接器的输入。但是我想消除大于16 MB大小的记录,以免从Mongo DB中获得最大大小例外。谁能帮我过滤行的效率如何?

注意:我尝试了SizeEstimator.estimate(row)。我没有为我工作,因为JVM的大小不同于Mongo Document的大小。

感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

我发现了this库,这可能对您计算字节大小的行很有帮助。导入项目后,我将通过以下方式计算行大小:

导入clouseau库,Spark SQL函数和Spark隐式:

import clouseau.Calculate
import org.apache.spark.sql.functions._
import spark.implicits._

创建用户定义的函数,以便它使用Row对象并返回其大小。

val calculateRowSize = udf((row: Row) => Calculate.sizeOf(row))

通过传递所有列来应用用户定义功能,并删除那些大小大于16 MB的行。

df
  .withColumn("rowSize", calculateRowSize(struct(df.columns.map(col): _*)))
  .filter($"rowSize" <= 16000000)

希望有帮助。