我正在预处理我的数据(2000K +行),并且想要计算spark数据框中的重复列,例如:
id | col1 | col2 | col3 | col4 |
----+--------+-------+-------+-------+
1 | 3 | 999 | 4 | 999 |
2 | 2 | 888 | 5 | 888 |
3 | 1 | 777 | 6 | 777 |
在这种情况下,col2和col4的值相同,这是我的兴趣,因此让计数+1。
我曾经尝试过在toyPandas(),转置,然后在pyspark中使用plicateDrop(),但这太慢了。
有什么功能可以解决这个问题吗?
任何想法都将不胜感激,谢谢。
答案 0 :(得分:0)
因此,您要基于col2
和col4
列计算重复值的数量吗?这应该可以解决以下问题。
val dfWithDupCount = df.withColumn("isDup", when($"col2" === "col4", 1).otherwise(0))
这将创建一个带有新布尔值列的新数据框,该布尔值列表示如果col2
等于col4
,则输入值1,否则输入0。
要查找总行数,您要做的就是根据isDup
和计数进行分组。
import org.apache.spark.sql.functions._
val groupped = df.groupBy("isDup").agg(sum("isDup")).toDF()
display(groupped)
很抱歉,如果我误解了你。如果尝试将任何列匹配在一起,则可能使用相同的解决方案,但这将需要嵌套when语句。