Как преобразовать строку в набор данных <Row>в искровой Java - PullRequest
0 голосов
/ 07 марта 2019

Я перебираю Dataset<Row>, используя ForeachFunction, в то время как во время перебора я не знаю, как добавить некоторые пользовательские столбцы в строку и добавить их к другому Dataset<Row> в spark Java

Код:

groupedDataset.foreach((ForeachFunction<Row>) row -> {

   double average = //some value

   // the Row has four columns
   // All I want is to have a new Dataset<Row> with specific columns
   // from the Row i.e row(0),row(1),row(3) and average value

   Dataset<Row> newDs = row.getString("ID"),row.getString("time"),row.getInt("value"),average;

});

Я много пробовал, но не смог решить.

Спасибо!

1 Ответ

0 голосов
/ 07 марта 2019

Строки не должны изменяться напрямую (это возможно, но не удобно). При манипуляциях с фреймами данных (набором данных строк) вы должны использовать API-интерфейс SparkSQL по двум основным причинам: 1. он прост в использовании 2. он позволяет spark выполнять множество оптимизаций по вашим запросам.

Теперь вот пример, который выглядит так, как будто вы пытаетесь достичь. По сути, я создаю набор данных с тремя столбцами и использую выборку, чтобы усреднить результат двух из них и отбросить последний. Дайте мне знать, если вам нужно больше деталей.

SparkSession spark = SparkSession.builder().getOrCreate();
Dataset<Row> data = spark
    .range(10)
    .select(col("id").as("id"),
            col("id").cast("string").as("str"),
            col("id").plus(5).as("id5") );
    data.show();

    Dataset<Row> result = data
        .select(col("id"), col("id5"),
                col("id").plus(col("id5")).divide(2).as("avg"));

    result.show();

, что дает:

+---+---+---+
| id|str|id5|
+---+---+---+
|  0|  0|  5|
|  1|  1|  6|
|  2|  2|  7|
+---+---+---+   

+---+---+---+
| id|id5|avg|
+---+---+---+
|  0|  5|2.5|
|  1|  6|3.5|
|  2|  7|4.5|
+---+---+---+
...