Chispa: Restar los valores en una misma fila conjunto de datos

Jboy:

Dado el siguiente conjunto de datos:

| title | start | end
| bla   | 10    | 30

Me gustaría encontrar la diferencia (inicio - fin) entre los dos números y los puso en una nueva columna, por lo que parece:

| title | time_spent |
 | bla   | 20 |

Los datos son del tipo Dataset<Row>
dataset = dataset.withColumn("millis spent: ", col("end") - col("start")).as("Time spent");
que esperaba que esto funcione, como lo vi en esta cuestión, pero sí ot, tal vez debido a que el hilo se trata de tramas de datos y no de conjuntos de datos, o tal vez porque le permite Scala, donde al igual que en Java es ilegal?

AGF:

Se puede considerar métodos estáticos. En breve:

import static org.apache.spark.sql.functions.expr;
...
df = df
    .withColumn("time_spent", expr("end - start"))
    .drop("start")
    .drop("end");

expr() evaluará el valor de sus columnas.

Aquí está el ejemplo completo con las importaciones correctas. Lo sentimos la parte mayor del ejemplo es sobre la creación de la trama de datos.

package net.jgp.books.sparkInAction.ch12.lab990Others;

import static org.apache.spark.sql.functions.expr;

import java.util.ArrayList;
import java.util.List;

import org.apache.spark.sql.Dataset;
import org.apache.spark.sql.Row;
import org.apache.spark.sql.RowFactory;
import org.apache.spark.sql.SparkSession;
import org.apache.spark.sql.types.DataTypes;
import org.apache.spark.sql.types.StructField;
import org.apache.spark.sql.types.StructType;

/**
 * Use of expr().
 * 
 * @author jgp
 */
public class ExprApp {

  /**
   * main() is your entry point to the application.
   * 
   * @param args
   */
  public static void main(String[] args) {
    ExprApp app = new ExprApp();
    app.start();
  }

  /**
   * The processing code.
   */
  private void start() {
    // Creates a session on a local master
    SparkSession spark = SparkSession.builder()
        .appName("All joins!")
        .master("local")
        .getOrCreate();

    StructType schema = DataTypes.createStructType(new StructField[] {
        DataTypes.createStructField(
            "title",
            DataTypes.StringType,
            false),
        DataTypes.createStructField(
            "start",
            DataTypes.IntegerType,
            false),
        DataTypes.createStructField(
            "end",
            DataTypes.IntegerType,
            false) });

    List<Row> rows = new ArrayList<Row>();
    rows.add(RowFactory.create("bla", 10, 30));
    Dataset<Row> df = spark.createDataFrame(rows, schema);
    df.show();

    df = df
        .withColumn("time_spent", expr("end - start"))
        .drop("start")
        .drop("end");
    df.show();

  }
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=190700&siteId=1
Recomendado
Clasificación