【问题标题】:Easy way to center a column in a Spark DataFrame在 Spark DataFrame 中将列居中的简单方法
【发布时间】:2019-02-27 11:07:36
【问题描述】:

我想在 Spark DataFrame 中使列居中,即用列的平均值减去列中的每个元素。目前,我手动进行,即首先计算列的平均值,从缩减的 DataFrame 中获取值,然后用平均值减去列。我想知道在 Spark 中是否有一种简单的方法可以做到这一点?有什么内置函数可以做到吗?

【问题讨论】:

标签: apache-spark apache-spark-sql centering


【解决方案1】:

没有内置函数,但您可以使用用户定义的函数 [udf],如下所示

import org.apache.spark.sql.DataFrame

val df = spark.sparkContext.parallelize(List(
(2.06,0.56),
(1.96,0.72),
(1.70,0.87),
(1.90,0.64))).toDF("c1","c2")

def subMean(mean: Double) = udf[Double, Double]((value: Double) => value - mean)

def getCenterDF(df: DataFrame, col: String): DataFrame = {
val avg = df.select(mean(col)).first().getAs[Double](0);
df.withColumn(col, subMean(avg)(df(col)))
}

scala> df.show(false)
+----+----+
|c1  |c2  |
+----+----+
|2.06|0.56|
|1.96|0.72|
|1.7 |0.87|
|1.9 |0.64|
+----+----+

scala> getCenterDF(df, "c2").show(false)
+----+--------------------+
|c1  |c2                  |
+----+--------------------+
|2.06|-0.13750000000000007|
|1.96|0.022499999999999853|
|1.7 |0.17249999999999988 |
|1.9 |-0.05750000000000011|
+----+--------------------+

【讨论】:

    猜你喜欢
    • 2019-04-06
    • 1970-01-01
    • 2018-09-29
    • 1970-01-01
    • 2015-11-18
    • 2014-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多