如何有效地获取数据帧的记录大小的最大长度



如何知道数据集最长记录(行(的大小(以字节为单位(。

我有一个相当大的数据帧,记录(行(的长度可变,我想知道有效负载最大的行的长度。

它有数百万行,所以我想知道一种有效且不会影响性能的方法。

我有DataFrameWriter作为输入。

检查以下代码。

scala> import org.apache.commons.io.FileUtils
import org.apache.commons.io.FileUtils
scala> val bytes = udf((length:Long) => FileUtils.byteCountToDisplaySize(length)) // To disply human readable size.
bytes: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,Some(List(LongType)))
scala> df
.withColumn("size",length(to_json(struct($"*"))))
.orderBy($"size".desc)
.select(bytes($"size").as("size_in_bytes"))
.show(10,false)
+-------------+
|size_in_bytes|
+-------------+
|49 KB        |
|49 KB        |
|49 KB        |
|48 KB        |
|48 KB        |
|48 KB        |
|43 KB        |
|43 KB        |
|43 KB        |
|42 KB        |
+-------------+
only showing top 10 rows

scala> df
.withColumn("size",length(to_json(struct($"*"))))
.orderBy($"size".desc)
.select($"size".as("size_in_bytes"))
.show(10,false)// Without UDF.
+-------------+
|size_in_bytes|
+-------------+
|50223        |
|50219        |
|50199        |
|50079        |
|50079        |
|50027        |
|44536        |
|44488        |
|44486        |
|43836        |
+-------------+
only showing top 10 rows

scala>

也许这很有帮助-

bit_length

val df = Seq((1, 2, "hi", "hello")).toDF()
df.selectExpr("max(bit_length(concat_ws('', *)))/8 as bytes")
.show(false)
/**
* +-----+
* |bytes|
* +-----+
* |9.0  |
* +-----+
*/

相关内容

  • 没有找到相关文章

最新更新