Замените нулевые / неопределенные / неизвестные значения на наиболее часто используемые программно с помощью SparkSQL - PullRequest
0 голосов
/ 25 июня 2018

У меня один набор данных в приложении spark имеет следующую форму:

some_id     class       city
1           A           ROME
1           A           undefined
1           A           ROME
1           null        ROME
2           B           MILAN
2           B           unkown
2           B           MILAN
2           unknown     MILAN
3           C           PALERMO
3           C           PALERMO
3           C           null
3           null        PALERMO

И полученный набор данных должен выглядеть следующим образом:

some_id     class       city
1           A           ROME
1           A           ROME
1           A           ROME
1           A           ROME
2           B           MILAN
2           B           MILAN
2           B           MILAN
2           B           MILAN
3           C           PALERMO
3           C           PALERMO
3           C           PALERMO
3           C           PALERMO

Я пробовал базовый способ циклов, ноЯ нашел это не практичным, каков наилучший способ сделать это?

вот что я пытался сделать:

String[] columnsNames = {"class", "city"};

for (String columnName : columnsNames)  {
                Dataset<Row> grouped = mydataset.groupBy(col("some_id"), col(columnName)).agg(functions.count("*").alias("itemCount"));

                grouped = grouped
                        .where(not(col(columnName).equalTo("null")))
                        .groupBy(col("some_id"))
                        .agg(functions.max(col("itemCount")))
                ;

                grouped.show();

                ...etc    
}

1 Ответ

0 голосов
/ 25 июня 2018

если id = 1 всегда ассоциируется с классом A и городом Рим, у вас есть два варианта: изменить свой входной файл или с помощью spark (набор данных) вы можете сгруппировать по id, выбрать только записи, которые с классом andcity! = Null или unknown и сохраните результат в новом наборе данных. Для достижения результата вы можете использовать функцию sql и сделать что-то вроде этого:

    dataset.createOrReplaceTempView("tempView");
    Dataset<Row> filteredRows = session.sql("select * from tempView where some_id <> null and some_id <> unknown and city <> null and city <> uknown group by some_id")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...