Почему проблема с кодом?Я связан с кластерами - PullRequest
0 голосов
/ 23 сентября 2019

Я пытался применить функцию UDF для округления этих pct, может быть, есть лучшие способы, я открыт для этого, потому что я новичок в pyspark.Когда я удалил функцию udf, чтобы отказаться от округления чисел, она сработала, поэтому я уверен в том, что с фреймом данных.

Так что, ребята, гений, пожалуйста, помогите мне, любовь и мир

Я попробовал spqrk.sqlв блоках данных, чтобы получить этот фрейм данных, и он выглядел хорошо.

Вот коды:

from pyspark.sql.types import IntegerType

round_func = udf(lambda x:round(x,2), IntegerType())

q2_res = q2_res.withColumn('pct_DISREGARD', round_func(col('pct')))

display(q2_res)

ОШИБКА: AttributeError: у объекта 'NoneType' нет атрибута '_jvm'

1 Ответ

0 голосов
/ 23 сентября 2019

Очевидно, что мы не можем использовать любой из pyspark.sql.functions с udf.Подробное объяснение дано в этой ветке.Вы пытаетесь использовать функцию round, поэтому она не будет работать, так как она работает только со столбцами.Мы можем достичь той же функциональности гораздо проще:

from pyspark.sql.types import IntegerType
import pyspark.sql.functions as f

q2_res = q2_res.withColumn('pct_DISREGARD', f.round('pct', 2).astype(IntegerType()))

Обычно желательно избегать UDF-функций, насколько это возможно, потому что они довольно медленные.

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