我需要读取镶木地板文件并生成最小最大输出 表格格式如下所示,
**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所示 上面的输出部分。
答案 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|
+-------+------------------+------------------+---+
希望这有帮助!