在Spark中查找Dataframe行中的最小值

时间:2017-04-28 01:12:39

标签: apache-spark apache-spark-sql apache-spark-dataset

我试图找出DataFrame中[row]的最低值。我怎样才能做到这一点?我的数据集是这样的:

aaaa |-32566.335700000003|         27668.7725|         20183.4786|
bbbb | -3.924099999999997|  5.802000000000006|  4.988000000000004|
cccc |  951546.8948000005| -686025.1569999934| -62493.96830000022|
xxxx |-26563.328700000005| 52490.610100000005|          -5555.277|

研究:我要做的是转置上面的内容然后进行排序并选择上面的行作为列。请使用已经存在的Spark数据集函数建议任何替代方法。

以上只是一个样本数据集,实际列数远远超过此值,以获得行中的最低值。

1 个答案:

答案 0 :(得分:0)

您可以通过将一行中的所有数字列作为列表,然后在此列表中查找最小值来执行此操作:

val df = sc.parallelize(Seq(("a",1.0,2.0,3.0),("b",-1.0,-2.0,-3.0),("c",-1.0,0.0,1.0))).toDF("id","v1","v2","v3")
df.show

val numericCols = List("v1", "v2", "v3") // you can get these from the df.schema if you need generic approach

val dfMin = df.map(r => (r.getAs[String]("id"), numericCols.map(column => r.getAs[Double](column)).min)).toDF("id", "minValue")
dfMin.show