Как написать условие динамического соединения в API Java Spark - PullRequest
0 голосов
/ 23 апреля 2019

Я хочу выполнить левое внешнее объединение в наборе данных с использованием искрового Java API.Как написать динамическое условие, чтобы соответствовать нескольким столбцам в условии соединения.

У меня есть два объекта набора данных.Оба они имеют 2 или более столбцов.Я не могу определить условие

Пример, который сопоставляет один столбец с другим

dataSet = resultData.as("resultData").join(distinctData.as("distinctData"), resultData.col("A").equalTo(distinctData.col("B")), "leftouter").selectExpr(select.toString());

Теперь, поскольку существует несколько столбцов, я не могу определить динамическое выражение для сопоставления нескольких столбцов с помощью Java.API.

1 Ответ

1 голос
/ 23 апреля 2019

непроверенный код - но это динамически генерирует условие соединения из списка имен столбцов

public Column makeJoinConditional(Dataset<Row> df1, Dataset<Row> df2, List<String> columnNames, Column c)  {

        if (c==null) {
            String  top = columnNames.get(0);
            columnNames.remove(0);
            Column first = df1.col(top).equalTo(df2.col(top));

            return makeJoinConditional(df1,df2, columnNames,first);

        } else {

            if (columnNames.size()==0) {
                return c;
            } else {
                String  top = columnNames.get(0);
                columnNames.remove(0);
                Column next = c.and( df1.col(top).equalTo(df2.col(top)) );
                return makeJoinConditional(df1,df2, columnNames,next);
            }
        }
    }

    public Dataset<Row> joinDataFrames(Dataset<Row> df1, Dataset<Row> df2, List<String> columns) {
        Column joinCols = makeJoinConditional(df1,df2,columns,null);
        return df1.join(df2,joinCols);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...