使用java spark加载csv时删除重复的列

时间:2018-04-08 12:52:46

标签: apache-spark-sql

我试图在java spark中加入两个表,其中一个表包含重复的列。问题是列是用尾随数字重命名的,因此dropDuplicates()函数不起作用。

以下是代码:

Dataset<Row> data = spark.read().format("csv").option("header", "true").option("inferSchema", "true")
            .load(path);
data.dropDuplicates();

问题是表中的重复列已经使用尾随数字重命名,因此不会删除重复项。 处理它的正确方法是什么?

  • 我使用的是spark-sql_2.11-2.3.0

1 个答案:

答案 0 :(得分:0)

按后缀(没有尾随数字)对所有列名称进行分组,然后从每个组中只选择一个(随机)列。然后,可以使用此列名列表在连接之前选择列。

String[] allFieldNames = data.schema().fieldNames();        
String[] selected = Stream.of(allFieldNames)
  .collect(Collectors.toMap(s -> s.replaceAll("^[0-9]*", ""), Function.identity(), (a, b) -> b)).values()
  .toArray(new String[0]);

Dataset<Row> dfWithUniqueCols = data.select(selected[0], Arrays.copyOfRange(selected, 1, selected.length));