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:无法将字符串转换为浮点数/浮点()的无效文字

Pyspark rdd.zip ValueError:无法反序列化具有不同成对项目数的 RDD

使用 PySpark 将列转换为小写

将列的内容拆分为pyspark中的行