【问题标题】:Calculate variance across columns in pyspark计算pyspark中各列的方差
【发布时间】:2017-04-28 15:25:57
【问题描述】:
如何计算 pyspark 中众多列的方差?
例如如果 pyspark.sql.dataframe 表是:
ID A B C
1 12 15 7
2 6 15 2
3 56 25 25
4 36 12 5
需要的输出是
ID A B C Variance
1 12 15 7 10.9
2 6 15 2 29.6
3 56 25 25 213.6
4 36 12 5 176.2
pyspark 中有一个方差函数,但它只能按列工作。
【问题讨论】:
标签:
pyspark
multiple-columns
variance
【解决方案1】:
只需使用concat_ws 函数连接您需要的列,然后使用 udf 计算方差,如下所示
from pyspark.sql.functions import *
from pyspark.sql.types import *
from statistics import pvariance
def calculateVar(row):
data = [float(x.strip()) for x in row.split(",")]
return pvariance(data)
varUDF = udf(calculateVar,FloatType())
df.withColumn('Variance',varUDF(concat_ws(",",df.a,df.b,df.c))).show()
输出:
+---+---+---+---+---------+
| id| a| b| c| Variance|
+---+---+---+---+---------+
| 1| 12| 15| 7|10.888889|
| 2| 6| 15| 2|29.555555|
| 3| 56| 25| 25|213.55556|
| 4| 36| 12| 5|176.22223|
+---+---+---+---+---------+