Python 如何从ApacheSpark中的两个csv文件中删除两个重复的值?

Python 如何从ApacheSpark中的两个csv文件中删除两个重复的值?,python,csv,apache-spark,pyspark,Python,Csv,Apache Spark,Pyspark,apache spark的新手。我想做的是从两个csv文件中删除两个重复的密钥。我尝试过dropDuplicates()和distinct(),但所做的只是删除一个值。例如,如果key=1010出现在两个csv文件中,我希望它们都消失。如何执行此操作?可以使用Spark数据帧执行此操作。 首先从CSV文件创建两个数据帧: val df1 = spark.read.format("com.databricks.spark.csv").option("header", "true").option(

apache spark的新手。我想做的是从两个csv文件中删除两个重复的密钥。我尝试过dropDuplicates()和distinct(),但所做的只是删除一个值。例如,如果key=1010出现在两个csv文件中,我希望它们都消失。如何执行此操作?

可以使用Spark数据帧执行此操作。 首先从CSV文件创建两个数据帧:

val df1 = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("file1.csv")
df1.show
+----+
| key|
+----+
|1010|
|1234|
+----+

val df2 = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("file2.csv")
df2.show
+----+
| key|
+----+
|1010|
|1221|
+----+
然后,要找出两个CSV文件中的唯一值,请执行以下操作:
(df1 U df2)-(df1∩ df2)


这可以使用Spark数据帧来完成。 首先从CSV文件创建两个数据帧:

val df1 = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("file1.csv")
df1.show
+----+
| key|
+----+
|1010|
|1234|
+----+

val df2 = spark.read.format("com.databricks.spark.csv").option("header", "true").option("inferSchema", "true").load("file2.csv")
df2.show
+----+
| key|
+----+
|1010|
|1221|
+----+
然后,要找出两个CSV文件中的唯一值,请执行以下操作:
(df1 U df2)-(df1∩ df2)


谢谢@himanshulltian的精彩回答。我想多说几句。如果文件中有多个列;然后您只需要根据
列删除记录。另外,我不知道您的csv文件是否具有相同的模式。这里有一种处理这种情况的方法。让我借用希曼舒尔提安的例子

首先,让我们查找共享某个键的记录:
val dupKey=df1.join(df2,“key”)。选择(“key”)
。然后我们可以在每个数据帧中找到希望删除的部分:
val rmDF1=df1.join(dupKey,“key”)
。最后,相同的except操作:
val newDF1=df1.except(rmDF)


这也许微不足道。但是工作。希望能有所帮助。

谢谢@himanshulllTian的精彩回答。我想多说几句。如果文件中有多个列;然后您只需要根据
列删除记录。另外,我不知道您的csv文件是否具有相同的模式。这里有一种处理这种情况的方法。让我借用希曼舒尔提安的例子

首先,让我们查找共享某个键的记录:
val dupKey=df1.join(df2,“key”)。选择(“key”)
。然后我们可以在每个数据帧中找到希望删除的部分:
val rmDF1=df1.join(dupKey,“key”)
。最后,相同的except操作:
val newDF1=df1.except(rmDF)


这也许微不足道。但是工作。希望这有帮助。

你是对的。GyCy。上面提供的解决方案在数据集中只考虑一列的情况下是很好的。但是,如果我们将整个记录视为唯一的集合,那么它将按预期工作。你是正确的。GyCy。上面的解决方案在数据集中只考虑一列时是很好的。但是,如果我们将整个记录视为唯一的集合,那么它将按预期工作。