scala—如何有效地获取Dataframe记录大小的最大长度

wz1wpwve  于 2021-05-27  发布在  Spark
关注(0)|答案(2)|浏览(959)

如何知道数据集最长记录(行)的大小(字节)。
我有一个很大的Dataframe,记录长度(行)可变,我想知道负载最大的行的长度。
它有数百万\数十亿行,所以我想知道一种有效且不会影响性能的方法。
我有dataframewriter作为输入。

rqqzpn5f

rqqzpn5f1#

也许这是有帮助的- bit_length ```
val df = Seq((1, 2, "hi", "hello")).toDF()

  1. df.selectExpr("max(bit_length(concat_ws('', *)))/8 as bytes")
  2. .show(false)
  3. /**
  4. * +-----+
  5. * |bytes|
  6. * +-----+
  7. * |9.0 |
  8. * +-----+
  9. */
eblbsuwk

eblbsuwk2#

检查以下代码。

  1. scala> import org.apache.commons.io.FileUtils
  2. import org.apache.commons.io.FileUtils
  3. scala> val bytes = udf((length:Long) => FileUtils.byteCountToDisplaySize(length)) // To disply human readable size.
  4. bytes: org.apache.spark.sql.expressions.UserDefinedFunction = UserDefinedFunction(<function1>,StringType,Some(List(LongType)))
  5. scala> df
  6. .withColumn("size",length(to_json(struct($"*"))))
  7. .orderBy($"size".desc)
  8. .select(bytes($"size").as("size_in_bytes"))
  9. .show(10,false)
  10. +-------------+
  11. |size_in_bytes|
  12. +-------------+
  13. |49 KB |
  14. |49 KB |
  15. |49 KB |
  16. |48 KB |
  17. |48 KB |
  18. |48 KB |
  19. |43 KB |
  20. |43 KB |
  21. |43 KB |
  22. |42 KB |
  23. +-------------+
  24. only showing top 10 rows
  25. scala> df
  26. .withColumn("size",length(to_json(struct($"*"))))
  27. .orderBy($"size".desc)
  28. .select($"size".as("size_in_bytes"))
  29. .show(10,false)// Without UDF.
  30. +-------------+
  31. |size_in_bytes|
  32. +-------------+
  33. |50223 |
  34. |50219 |
  35. |50199 |
  36. |50079 |
  37. |50079 |
  38. |50027 |
  39. |44536 |
  40. |44488 |
  41. |44486 |
  42. |43836 |
  43. +-------------+
  44. only showing top 10 rows
  45. scala>
展开查看全部

相关问题