我想将列类型转换为int并获取前3行
df.withColumn("rn", rowNumber().over(windowSpec).cast('int')).where("rn"<=3).drop("rn").show()
但我这个错误
TypeError: unorderable types: str() <= int()
答案 0 :(得分:2)
错误在于:
.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
来实现向前兼容性。