我试图在java spark中加入两个表,其中一个表包含重复的列。问题是列是用尾随数字重命名的,因此dropDuplicates()
函数不起作用。
以下是代码:
Dataset<Row> data = spark.read().format("csv").option("header", "true").option("inferSchema", "true")
.load(path);
data.dropDuplicates();
问题是表中的重复列已经使用尾随数字重命名,因此不会删除重复项。 处理它的正确方法是什么?
答案 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));