【问题标题】:Calculate min max using Spark dataframe and vertically align output使用 Spark 数据框计算最小值最大值并垂直对齐输出
【发布时间】:2017-07-19 16:49:43
【问题描述】:

我需要读取 parquet 文件并在 表格格式如下图,

  **Required output**

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

下面的代码,我可以读取 parquet 文件并生成 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

有没有办法可以将生成的输出正确放置 垂直对齐格式的列名称,如必填项中所示 上面的输出部分。

【问题讨论】:

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


【解决方案1】:

如果你想找到每列的最小值和最大值,你可以使用describe functionins 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|
+-------+------------------+------------------+---+

希望这会有所帮助!

【讨论】:

  • 谢谢尚卡尔!你太棒了..这确实有帮助。我接受这个答案。是否可以扩展此代码以计算其他因素,例如偏度、中位数、唯一值、峰度等。
  • 是的,你可以计算偏度和峰度,你可以在这里看到issues.apache.org/jira/browse/SPARK-10641
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-29
  • 2021-01-15
  • 1970-01-01
相关资源
最近更新 更多