Java Набор данных Spark для получения значения ячейки - PullRequest
0 голосов
/ 28 марта 2020

Мой набор данных выглядит следующим образом, я хочу получить 1-ую строку, значение 1-го столбца (в данном случае A1)

 +-------+---+--------------+----------+
 |account|ccy|count(account)|sum_amount|
 +-------+---+--------------+----------+
 |     A1|USD|             2|    500.24|
 |     A2|SGD|             1|    200.24|
 |     A2|USD|             1|    300.36|
 +-------+---+--------------+----------+

Я могу сделать это следующим образом:

 Dataset finalDS = dataset.groupBy("account", "ccy").
    agg(count("account"), sum("amount").alias("sum_amount"))
    .orderBy("account", "ccy");

Object[] items = (Object[])(finalDS.filter(functions.col("sum_amount")
    .equalTo(300.36))
    .collect());

String accountNo =  (String)((GenericRowWithSchema)items[0]).get(0);

2 вопроса:

  1. Есть ли другой / более эффективный способ сделать это? Мне известно о Dataframe/JavaRDD запросах
  2. Без явного преобразования Object[] происходит сбой времени компиляции, однако я бы подумал, что это неявное приведение. Почему ? Я подозреваю, что что-то связано с компиляцией scala.

1 Ответ

0 голосов
/ 29 марта 2020

Есть ли другой / более эффективный способ сделать это? Мне известны запросы Dataframe / JavaRDD

. Вам лучше использовать функцию Dataset.head ( javadocs ), чтобы исключить передачу всех данных процессу драйвера. Это ограничит вас загрузкой только 1-й строки в ОЗУ драйвера вместо всего набора данных. Вы также можете рассмотреть возможность использования функции take для получения первых N строк.

Без явного приведения Object [] произойдет сбой времени компиляции, однако я бы подумал, что это является неявным приведением. Почему ? Я подозреваю, что что-то связано с компиляцией scala.

Это зависит от того, как набран ваш набор данных. В случае Datarame (что является Dataset[Row], доказательство ), вы получите Array[Row] при вызове collect. Стоит упомянуть сигнатуру функций collect :

  def collect(): Array[T] = withAction("collect", queryExecution)(collectFromPlan)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...