python - 使用 '==' 比较器和使用带有 spark 的 .contains('val') 有什么区别?
问题描述
我有一个通过将其他三个数据框连接在一起创建的数据框,我需要对其执行许多 sum case 语句。我发现 withcolumn() 函数可能是我的解决方案,但是当我对具有 char 的列进行比较时,当我使用 .contains() 或 '==' 时,我得到两个截然不同的数字。
下面的代码显示了两者的使用方式 - 这是带有 .contains 的代码:
test_data.withColumn('NewCol', F.when((test_data.col1 == 'str') & ((test_data.col2.contains('X')) | (test_data.col2.contains('Y'))) ,1).otherwise(0)) \
.groupBy('KEY') \
.agg(F.sum('NewCol').alias('NewCol))
结果计数为 127470 行 > 0
这是带有比较器的代码:
test_data.withColumn('NewCol', F.when((test_data.col1 == 'str') & ((test_data.col2 == 'X') | (test_data.col2 == 'Y')) ,1).otherwise(0)) \
.groupBy('KEY') \
.agg(F.sum('NewCol').alias('NewCol))
结果计数为 531645 行 > 0。
如您所见,使用比较器与 .contains() 时,具有 1 的行数要大得多。.contains() 是在进行比较之前进行过滤,还是有其他原因导致数字大相径庭?
解决方案
== 匹配整个字符串 .contains() 搜索到要查找字符串的字符串 示例:"yesterday"== "day" 为 false 但 "yesterday".Contains("day") 为 true
推荐阅读
- json - 在 Ansible 中检索、操作和发回 JSON
- java - 从源代码创建 jfreechart-1.5.3 JAR
- ios - 如何修改 ShareViewController 以便在共享表中选择应用程序会导致保存媒体并启动所选应用程序?
- powershell - 以 ComObject 的形式打开 PowerShell 脚本
- laravel - SassError:未定义的函数 Laravel Vue
- html - 如何在不破坏时间线格式的情况下使用溢出-x
- python - 写入串口但只接收第一个字符?
- javascript - 当提供以前用户使用的电子邮件地址时,尝试使用 Javascript 阻止我的表单提交
- python - 从嵌套结构中删除 JSON 数据对
- java - 如何使用 jersey REST Webtarget API 发布对象的 json 列表?- 得到错误 MessageBodyWriter not found