#python #apache-spark #types #casting
#python #apache-spark #типы #Кастинг
Вопрос:
Я хочу привести тип столбца к int и получить первые 3 строки
df.withColumn("rn", rowNumber().over(windowSpec).cast('int')).where("rn"<=3).drop("rn").show()
но я эту ошибку
TypeError: unorderable types: str() <= int()
Ответ №1:
Ошибка здесь:
.where("rn"<=3)
И вот как вы можете это выяснить, если когда-нибудь столкнетесь с подобной проблемой в будущем. Следующее
TypeError: unorderable types: str() <= int()
является исключением Python, и его нет Py4JError
. Обычно это означает, что вы можете отклонить проблемы с JVM и сосредоточиться на ядре Python. Единственная часть вашего кода, в которой вы явно сравниваете вещи, это:
"rn" <= 3
Если вы хотите, чтобы это был литерал SQL, вы должны передать строку:
.where("rn <= 3")
Если вы хотите rn
, чтобы он был разрешен как столбец, используйте col
функцию:
from pyspark.sql.functions import col
.where(col("rn") <= 3)
Также rowNumber
функция была удалена в последней версии. Вы должны использовать row_number
для прямой совместимости.