我有一个DataFrame,它是通过将其他三个数据帧连接在一起而创建的,我需要对它们进行许多求和的情况下的声明。我发现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()还是有其他原因导致数字大不相同?
答案 0 :(得分:0)
==匹配整个字符串 .contains()搜索字符串以查找字符串 例: “ yesterday” ==“ day”为假 但 “ yesterday”。Contains(“ day”)为真