【问题标题】:describe() function over rows instead columnsdescribe() 函数对行而不是列
【发布时间】:2017-07-03 22:39:54
【问题描述】:

如前所述: https://databricks.com/blog/2015/06/02/statistical-and-mathematical-functions-with-dataframes-in-spark.html

describe() 函数适用于每个数字列,是否可以针对行执行此操作?我的 DF 大小是 53 cols 和 346,143 rows,所以转置不是一个选项。我该怎么做?

我使用的是 Spark 2.11

【问题讨论】:

  • 所以您想要 1 行所有列的统计信息(最小值、最大值、平均值等)?然后只需制作一个 scala 函数(用于数据集)或 UDF(DataFrame),它会执行您需要的计算

标签: scala apache-spark spark-dataframe


【解决方案1】:

您可以制作自己的 UDF。要么为每个数量创建一个单独的 UDF,要么将所有内容放入 1 个 UDF 中,返回一个复杂的结果:

val df = Seq(
  (1.0,2.0,3.0,4.0,5.0)  
).toDF("x1","x2","x3","x4","x5")


val describe = udf(
  { xs : Seq[Double] => 

    val xmin = xs.min
    val xmax = xs.max
    val mean = xs.sum/xs.size.toDouble

    (xmin,xmax,mean)
  }
)

df
.withColumn("describe",describe(array("*")))
.withColumn("min",$"describe._1")
.withColumn("max",$"describe._2")
.withColumn("mean",$"describe._3")
.drop($"describe")
.show

给予:

+---+---+---+---+---+---+---+----+
| x1| x2| x3| x4| x5|min|max|mean|
+---+---+---+---+---+---+---+----+
|1.0|2.0|3.0|4.0|5.0|1.0|5.0| 3.0|
+---+---+---+---+---+---+---+----+

【讨论】:

  • udf 函数仅支持 11 列,而 OP 表示 53 列。你也必须解释如何处理这 53 列。
  • @RameshMaharjan 这也适用于超过 11 列(我测试过),因为 UDF 只有 1 个参数
  • 是的,你是对的。我的错误是我没有注意到这一点。 ;) 谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2016-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多