python - 在 WHEN 和 OTHERWISE 条件语句 pyspark 中获取 TypeError
问题描述
我无法克服这个:
用下面的代码我得到
TypeError: when() missing 1 required positional argument: 'value'
windowval=(Window.partitionBy('Location').orderBy('month_in_timestamp')
.rangeBetween(Window.unboundedPreceding, 0))
df1 = df.withColumn('NEW_COL', F.when(col('col1'). \
isin('data1', \
'data2', \
'data3', \
'data4',F.sum('col2').over(windowval))) \
,F.when(col('col1'). \
isin('data5', \
'data6', \
'data7', F.avg('col2').over(windowval))))
我也试过了,我得到了
java.lang.IllegalArgumentException: otherwise() can only be applied on a Column previously generated by when()
df_actual_ytd = df_tgt_reach.withColumn('NEW_COL', F.when(col('col1'). \
isin('data1', \
'data2', \
'data3', \
'data4',F.sum('col2').over(windowval))) \
.otherwise(F.avg('col2').over(windowval)))
解决方案
我试图修改你的缩进以理解你的when
条款,添加一些看起来有必要的更正。我无法测试更新的代码,因为我没有上下文:
df1 = df \
.withColumn('NEW_COL',
F.when(F.col('col1').isin('data1', 'data2', 'data3', 'data4', F.sum('col2').over(windowval)),
F.when(F.col('col1').isin('data5', 'data6', 'data7'), F.avg('col2').over(windowval))
)
)
when()
如果您的第一个条件匹配,我不确定您是否想要一个新条款,但无论如何,when()
如果满足要求,第二个没有价值。根据另一个主题,这是另一种选择:
df1 = df \
.withColumn('NEW_COL',
F.when(F.col('col1').isin('data1', 'data2', 'data3', 'data4'), F.sum('col2').over(windowval))
.when(F.col('col1').isin('data5', 'data6', 'data7'), F.avg('col2').over(windowval))
)
如果这是您想要的,您也可以.otherwise()
在某一时刻添加一个语句。
推荐阅读
- pine-script - 将脚本转换为 V4 时声明自引用变量会破坏图表
- python-3.x - 如何使用 Selenium 和多个 Url 写入 csv
- python - 检查函数参数的装饰器
- c++ - 致命错误 LNK2019 C++,Ureal 引擎构建
- c++ - 关闭风扇c ++
- pytest-bdd - 无法在 Pytest-bdd 中利用特征文件 1 到另一个特征文件 2 的步骤
- python - 为什么此代码在获取用户输入后不输出任何内容?
- vue.js - 在插件中访问 Nuxt Router
- .htaccess - .htaccess 父文件夹未完全覆盖
- python - Python和openssl的安装---不用yum