2017-07-19 67 views
0

我需要读取拼花文件并生成在 表格格式的最小最大输出如以下所示,计算最小最大火花数据帧和垂直对齐输出

**Required output** 

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

下面的代码,我能够读parquet文件并为所有列生成最大输出,但不是按照所需格式生成,但生成的输出是水平排列的。

  //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格式如图中必需 输出部的上方。

+1

[火花数据框中的列迭代并计算最小值最大值](https://stackoverflow.com/questions/45171920/iterate-across-columns-in-spark-dataframe-and-calculate-min-最大值) –

回答

0

如果你正在努力寻找最小,您可以使用describe function插件火花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| 
+-------+------------------+------------------+---+ 

希望这有助于!

+0

谢谢Shankar!你真棒..这确实有帮助。我接受这个答案。此代码是否可以扩展以计算其他因素,如偏度,中位数,独特值,峰度等。 – sabby

+0

是的,你可以计算偏度和峰度,你可以在这里看到https://issues.apache.org/jira/browse/SPARK- 10641 –