Я Я новичок в Искре.У меня есть таблица с колонками 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 |