-2

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

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

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

我有 DataFrameWriter 作为输入。

4

2 回答 2

0

检查下面的代码。

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>
于 2020-08-07T07:22:52.777 回答
0

也许这有帮助-

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  |
      * +-----+
      */
于 2020-08-07T10:27:22.260 回答