【问题标题】:Get max length in column for each column in a dataframe [duplicate]获取数据框中每列的最大长度[重复]
【发布时间】:2019-08-13 00:31:59
【问题描述】:

我有一个这样的 Spark 数据框

+-----------------+---------------+----------+-----------+
|     column1     |    column2    | column3  |  column4  |
+-----------------+---------------+----------+-----------+
| a               | bbbbb         | cc       | >dddddddd |
| >aaaaaaaaaaaaaa | bb            | c        | dddd      |
| aa              | >bbbbbbbbbbbb | >ccccccc | ddddd     |
| aaaaa           | bbbb          | ccc      | d         |
+-----------------+---------------+----------+-----------+

我想找到每列中最长元素的长度以获得类似的东西

+---------+-----------+
| column  | maxLength |
+---------+-----------+
| column1 |        14 |
| column2 |        12 |
| column3 |         7 |
| column4 |         8 |
+---------+-----------+

我知道如何逐列执行,但不知道如何告诉 Spark - Do it for all columns

我正在使用 Scala Spark。

【问题讨论】:

标签: apache-spark apache-spark-sql


【解决方案1】:

你可以使用agg函数maxlength函数来实现它

val x = df.columns.map(colName => {
  (colName, df.agg(max(length(col(colName)))).head().getAs[Integer](0))
}).toSeq.toDF("column", "maxLength")

输出:

+-------+---------+
|column |maxLength|
+-------+---------+
|column1|14       |
|column2|13       |
|column3|8        |
|column4|9        |
+-------+---------+

其他方式是

df.select(df.columns.map(c => max(length(col(c))).as(s"max_${c}")): _*)

输出:

+-----------+-----------+-----------+-----------+
|max_column1|max_column2|max_column3|max_column4|
+-----------+-----------+-----------+-----------+
|14         |13         |8          |9          |
+-----------+-----------+-----------+-----------+

【讨论】:

  • 漂亮而简单。我们如何在 python 中做到这一点?
猜你喜欢
  • 2018-10-24
  • 1970-01-01
  • 2014-08-30
  • 1970-01-01
  • 2013-02-21
  • 1970-01-01
  • 2010-11-06
  • 1970-01-01
  • 2014-10-08
相关资源
最近更新 更多