需要读取然后从Spark Scala中的多个CSV文件中删除重复项

时间:2019-07-11 16:00:01

标签: scala csv apache-spark

我是这个领域的新手,我有多个分区CSV文件,这些记录有重复记录。我想读取Spark Scala代码中的CSV文件,并在读取时也删除重复项。

我尝试了dropDuplicate()read.format("csv")的加载选项。

var df1 = thesparksession.read.format("csv").option("delimiter","|").option("header",true).load("path/../../*csv)
.withcolumn(col1)
df1.dropDuplicates().show()

如果说csv1具有值

emp1 1000 nuu -1903.33
emp2 1003 yuu 1874.44

csv2具有

emp1 1000 nuu -1903.33
emp4 9848 hee 1874.33

我只需要对emp1的一条记录进行进一步处理。

预期输出:

emp1 1000 nuu -1903.33
emp2 1003 yuu 1874.44
emp4 9848 hee 1874.33

2 个答案:

答案 0 :(得分:0)

根据输入数据,CSV列由管道分隔,要将CSV读入数据框,您可以执行

 var df1 = sparkSession.read.option("delimiter","|").csv(filePath)

//删除重复项

   val result = df1.dropDuplicates

   result.show

输出为:

    +----+----+---+--------+
    | _c0| _c1|_c2|     _c3|
    +----+----+---+--------+
    |emp1|1000|nuu|-1903.33|
    |emp4|9848|hee| 1874.33|
    |emp2|1003|yuu| 1874.44|
    +----+----+---+--------+

答案 1 :(得分:0)

dropDuplicates()

工作完美。

val sourcecsv = spark.read.option("header", "true").option("delimiter", "|").csv("path/../../*csv")
sourcecsv.show()

+-----+-----+----+--------+
|empid|idnum|name|  credit|
+-----+-----+----+--------+
| emp1| 1000| nuu|-1903.33|
| emp2| 1003| yuu| 1874.44|
| emp4| 9848| hee| 1874.33|
| emp1| 1000| nuu|-1903.33|
| emp2| 1003| yuu| 1874.44|
+-----+-----+----+--------+


//dropDuplicates() on a dataframe works perfect as expected
sourcecsv.dropDuplicates().show()

+-----+-----+----+--------+
|empid|idnum|name|  credit|
+-----+-----+----+--------+
| emp1| 1000| nuu|-1903.33|
| emp4| 9848| hee| 1874.33|
| emp2| 1003| yuu| 1874.44|
+-----+-----+----+--------+

请告诉我们是否还有其他问题。