我想将数据帧传递为spark mongo连接器的输入。但是我想消除大于16 MB
大小的记录,以免从Mongo DB
中获得最大大小例外。谁能帮我过滤行的效率如何?
注意:我尝试了SizeEstimator.estimate(row)
。我没有为我工作,因为JVM的大小不同于Mongo Document的大小。
感谢您的帮助!
答案 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)
希望有帮助。