apache-spark - pyspark when else 语句返回不正确的输出
问题描述
我在下面粘贴了我的代码。我期待什么时候col2 = 7
,它应该返回1
,但它有时会返回 1 ,有时会返回 2 - 在其他时候。col2
一旦设置好,我就不做任何操作了。有没有人经历过这种奇怪的行为?还是由于每个条件的限制重叠而导致的问题?
df = df.withColumn('col1', F.when(F.col('col2').between(1,7), 1)
.when(F.col('col2').between(7,14), 2)
.when(F.col('col2').between(14,21), 3)
.when(F.col('col2').between(21,28), 4)
.otherwise(5))
解决方案
第一点: between 是包容性的,并且您的区间中有一些重叠(7 在第一个和第二个区间中都可以是 True,因为它们都包含 7)
所以这应该改进:
df = df.withColumn('col1', F.when(F.col('col2').between(1,7), 1)
.when(F.col('col2').between(8,14), 2)
.when(F.col('col2').between(15,21), 3)
.when(F.col('col2').between(22,28), 4)
.otherwise(5))
但是,当使用多个时,F.when()
我可以通过将它们嵌套在.otherwise(F.when())
如下所示的内部来减少麻烦:
df = df.withColumn('col1', F.when(F.col('col2').between(1,7), 1)
.otherwise(F.when(F.col('col2').between(8,14), 2)
.otherwise(F.when(F.col('col2').between(15,21), 3)
.otherwise(F.when(F.col('col2').between(22,28), 4)
.otherwise(5)))))
推荐阅读
- c - C语言中如何去掉引号
- python - 为什么我在 Django 3.2 中不断收到 NoReverse 错误
- sql - 我如何制定正确的方法来仅显示我关注的用户和我自己的意见
- asp.net-core - 请求管道中的 UseStatusCodePages() 位置
- android-studio - 如何从 mainActivity 访问变量(在协程内)?
- javascript - 试图编写内部服务器笑话但无法正常工作我该如何解决?
- photoshop - Photoshop 脚本 - 如果/当拖放运行时工作正常,添加到脚本时返回错误。现在甚至无法在全新安装时运行
- html - 更改项目的光标
- elasticsearch - 通过 Brew 升级 Eleastic Search - 现在不会以无法识别的 VM 选项“UseConcMarkSweepGC”错误开始
- python - 500 内部服务器错误 - python cgi 错误