PySpark код повышает: TypeError: аргумент float () должен быть строкой или числом - PullRequest
0 голосов
/ 14 мая 2018

У меня есть следующий фрагмент кода PySpark, который всегда работал нормально, кроме сегодняшнего дня:

row_stats = dataframe
                 .withColumn("exploded" , explode(col("products")))
                 .withColumn("score", col("exploded").getItem(target_field))
                 .where(col("score").isNotNull())
                 .select(mean_(col("score")).alias("mean"),stddev_(col("score")).alias("stddev")).first()

mean = 0
std = 0
if row_stats is not None:
    print "row_stats.mean"
    print row_stats.mean
    mean = Decimal(float(row_stats.mean))
    std = Decimal(float(row_stats.stddev))

Я получил ошибку в строке mean = Decimal(float(row_stats.mean)):

TypeError: float() argument must be a string or a number

Выход print:

<type 'NoneType'>
None

Как правильно обработать эту ошибку, чтобы mean и std были равны 0?

Ответы [ 2 ]

0 голосов
/ 29 октября 2018

Это должно работать с Pyspark , приведя ваш среднее объект к десятичному:

row_stats.mean.cast('decimal')
0 голосов
/ 14 мая 2018

Если вы используете панд,

Попробуйте row_stats.mean() вместо row_stats.mean

Кроме того, метод .mean () по умолчанию - это операции по столбцам, без просмотра остальной части вашего кода, основанный на имени переменной, который вы можете рассмотреть в subbing в row_stats.mean(axis=1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...