如何在Spark DataFrame中查找具有所有值的重复列?

时间:2019-07-01 03:53:29

标签: scala apache-spark

我正在预处理我的数据(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(),但这太慢了。

有什么功能可以解决这个问题吗?
任何想法都将不胜感激,谢谢。

1 个答案:

答案 0 :(得分:0)

因此,您要基于col2col4列计算重复值的数量吗?这应该可以解决以下问题。

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语句。