使用'=='比较器和使用带有火花的.contains('val')有什么区别?

时间:2019-05-09 18:36:05

标签: python apache-spark pyspark apache-spark-sql jupyter-notebook

我有一个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()还是有其他原因导致数字大不相同?

1 个答案:

答案 0 :(得分:0)

==匹配整个字符串 .contains()搜索字符串以查找字符串 例: “ yesterday” ==“ day”为假 但 “ yesterday”。Contains(“ day”)为真