Спарк Расчет Стандартное отклонение строки мудрый - PullRequest
0 голосов
/ 28 апреля 2018

Мне нужно рассчитать стандартное отклонение по строке, исходя из предположения, что у меня уже есть столбец с вычисленным средним значением для строки. Я попробовал это

SD= (reduce(sqrt((add, (abs(col(x)-col("mean"))**2 for x in df.columns[3:])) / n))).alias("SD")
dfS = df.withColumn("SD",SD)
dfS.select("stddev").show()

но я получил следующую ошибку

AttributeError: 'builtin_function_or_method' object has no attribute '_get_object_id'

1 Ответ

0 голосов
/ 28 апреля 2018

Ваш код полностью перепутан (в его текущем состоянии он даже не вызовет исключение, которое вы описали в вопросе). sqrt должен быть размещен вне reduce звоните:

from pyspark.sql.functions import col, sqrt
from operator import add
from functools import reduce

df = spark.createDataFrame([("_", "_", 2, 1, 2, 3)], ("_1", "_2", "mean"))
cols = df.columns[3:]

sd = sqrt(
    reduce(add, ((col(x) - col("mean")) ** 2 for x in cols)) / (len(cols) - 1)
)

sd
# Column<b'SQRT((((POWER((_4 - mean), 2) + POWER((_5 - mean), 2)) + POWER((_6 - mean), 2)) / 2))'>


df.withColumn("sd", sd).show()
# +---+---+----+---+---+---+---+         
# | _1| _2|mean| _4| _5| _6| sd|
# +---+---+----+---+---+---+---+
# |  _|  _|   2|  1|  2|  3|1.0|
# +---+---+----+---+---+---+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...