Как получить значения dataframe внутри карты SPARK JAVA - PullRequest
0 голосов
/ 09 октября 2018

Я Я новичок в Искре.У меня есть таблица с колонками id,operations.Итак, я хочу получить список частых слов из операций для каждого id.

Dataset<String> usersid = users.map((MapFunction<Row, String>) row -> row.getString(0), Encoders.STRING()));

Dataset<Row> grouped = spark.read().load("parquets/Operations");

usersid.toJavaRDD()
                    .filter(Objects::nonNull)
                    .map(id -> grouped
                            .select("OPERATIONS")
                            .where("M_P_CLIENTID=" + id)
                            .toJavaRDD()
                            .map(row -> row.<String>getAs("OPERATIONS").toLowerCase())
                            .flatMap(word -> Arrays.asList(word.split(" ")).iterator())
                            .filter(word -> word.length() > 2)
                            .mapToPair(word -> new Tuple2<>(word, 1))
                            .reduceByKey((a, b) -> a + b)
                            .mapToPair(Tuple2::swap)
                            .sortByKey(false).map(Tuple2::_2)
                            .take(5)
                            .toString());

в .select("OPERATIONS"), я получаю нулевой указатель.ЗАЧЕМ ?Кроме того, что я должен сделать, чтобы получить id и topwords, затем записать их как один кадр данных.

Мой ожидаемый результат:

input

| id    |   operation                                               |
| 12548 |a a a c b b c a a x y z k i l o j asdka asdklni asdl asjkdn|
| 54684 |b b b a a c c c c  asjkd  asiod asnjna sdkj;nasd12 asio123 |

output top 3 words

| id    | top3  |
| 12548 | a,b ,c|
| 54684 | c,b,a |
...