使用Spark数据帧计算最小最大值并垂直对齐输出

时间:2017-07-19 00:13:11

标签: scala apache-spark apache-spark-sql spark-dataframe

我需要读取镶木地板文件并生成最小最大输出     表格格式如下所示,

  **Required output**

column_name | min_value | max_value
:-----      | -----    :|:----:
  a         | 1         | 21
:-----      |------    :|:----:
  b         | 2         | 30

下面的代码,我能够读取镶木地板文件并生成min     所有列的最大输出,但不是按照所需的格式而是     生成的输出是水平的。

           //Read parquet file
val parquetRDD = spark.read.parquet("filename.parquet")

          //Calculate min and max value of columns
val minColumns = parquetRDD.columns.map(name => min(col(name)))

val maxColumns = parquetRDD.columns.map(name => max(col(name)))

val allMinMax = minColumns ++ maxColumns
         //Generate output 
val result = parquetRDD.agg(allMinMax.head, allMinMax.tail: _*).show()

  **Current Generated Output** 

min(a) | min(b) | max(a) | max(b)
:----- | -----: | ----:  | :----:
 1     | 2      | 21     |  30

有没有办法可以正确放置生成的输出       垂直alined格式的列名称,如Required所示       上面的输出部分。

1 个答案:

答案 0 :(得分:0)

如果您要查找每列的最小值和最大值,可以使用describe function ins spark sql,计算平均值和标准差

这是一个简单的例子,它如何生成

import spark.implicits._
val df1 = Seq((1,2,3), (3,4,5), (1,2,4)).toDF("A", "B", "C")
df1.describe().show()

输出:

+-------+------------------+------------------+---+
|summary|                 A|                 B|  C|
+-------+------------------+------------------+---+
|  count|                 3|                 3|  3|
|   mean|1.6666666666666667|2.6666666666666665|4.0|
| stddev|1.1547005383792517|1.1547005383792517|1.0|
|    min|                 1|                 2|  3|
|    max|                 3|                 4|  5|
+-------+------------------+------------------+---+

希望这有帮助!