Pyspark:将列值与另一个值进行比较

时间:2021-04-06 07:07:06

标签: python dataframe apache-spark pyspark apache-spark-sql

我有以下数据框:

+----+----+----+----+
|col0|col1|col2|col3|
+----+----+----+----+
|   1|  21|   3|null|
|   4|   5|  23|null|
|null|   4|   5|   6|
|null|   9|  22|  42|
+----+----+----+----+

我尝试计算列 'col1' 和 1.5 的最小值:

import pyspark.sql.functions as F

cond = df['col2'] > 10
df = df.withColumn('new_col', F.when(cond, F.least(F.col('col1')*0.2, 1.5)).otherwise(F.lit(100)))
df.show()

但我得到以下异常:

<块引用>

TypeError: 无效参数,不是字符串或列:类型 的 1.5。对于列文字,请使用“lit”、“array”、“struct”或“create_map”函数。

1 个答案:

答案 0 :(得分:2)

F.lit(1.5) 中使用 F.least,因为它需要一个列并且不接受浮点数:

df2 = df.withColumn('new_col', F.when(cond, F.least(F.col('col1')*0.2, F.lit(1.5))).otherwise(F.lit(100)))