PySpark - ValueError:无法将列转换为布尔值
Posted
技术标签:
【中文标题】PySpark - ValueError:无法将列转换为布尔值【英文标题】:PySpark - ValueError: Cannot convert column into bool 【发布时间】:2019-04-03 10:56:37 【问题描述】:所以我看到了这个解决方案:
ValueError: Cannot convert column into bool
这有我认为的解决方案。但我试图让它与我的数据框一起工作,但不知道如何实现它。
我的原始代码:
if df2['DayOfWeek']>=6 :
df2['WeekendOrHol'] = 1
这给了我错误:
无法将列转换为布尔值:请使用 '&' 表示 'and'、'|'为了 'or', '~' for 'not' 在构建 DataFrame 布尔表达式时。
所以根据上面的链接我试过了:
from pyspark.sql.functions import when
when((df2['DayOfWeek']>=6),df2['WeekendOrHol'] = 1)
when(df2['DayOfWeek']>=6,df2['WeekendOrHol'] = 1)
但这是不正确的,因为它也给了我一个错误。
【问题讨论】:
你可以做df2.withColumn("WeekendOrHol", (df2["DayOfWeek"]>=6).cast("int"))
。这与this post本质上是同一个问题
谢谢 - 我认为这是最好的答案。我看看能不能把它标记为重复。
无法将其标记为重复,因为另一个问题还没有被赞成或接受的答案。
【参考方案1】:
要根据条件更新列,您需要像这样使用when
:
from pyspark.sql import functions as F
# update `WeekendOrHol` column, when `DayOfWeek` >= 6,
# then set `WeekendOrHol` to 1 otherwise, set the value of `WeekendOrHol` to what it is now - or you could do something else.
# If no otherwise is provided then the column values will be set to None
df2 = df2.withColumn('WeekendOrHol',
F.when(
F.col('DayOfWeek') >= 6, F.lit(1)
).otherwise(F.col('WeekendOrHol')
)
希望这会有所帮助,祝你好运!
【讨论】:
谢谢 - 我必须在最后添加一个额外的括号,并首先确保新字段已经存在于数据框中(使用df2=df2.withColumn('WeekendOrHol', F.lit(0))
)。但是我认为 pault 上面的答案是最优雅的,所以会继续下去。【参考方案2】:
pault 提供的最佳答案:
df2=df2.withColumn("WeekendOrHol", (df2["DayOfWeek"]>=6).cast("int"))
这是以下内容的副本: this
【讨论】:
以上是关于PySpark - ValueError:无法将列转换为布尔值的主要内容,如果未能解决你的问题,请参考以下文章
pyspark:ValueError:推断后无法确定某些类型
ValueError 1:无法将列转换为布尔值:请使用 '&' 表示 'and'、'|' for 'or', '~' for 'not' 在构建 DataFrame 布尔表达式时
Pyspark - ValueError:无法将字符串转换为浮点数/浮点()的无效文字