java - Spark : subtract values in same DataSet row

标签 java apache-spark apache-spark-sql

给定以下数据集:

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

我想找到两个数字之间的差异(开始 - 结束)并将它们设置到一个新列中,这样它看起来像:

| title | time_spent |
 | bla   | 20 |

数据类型为Dataset<Row>
dataset = dataset.withColumn("millis spent: ", col("end") - col("start")).as("Time spent");
正如我在 this 中看到的那样,我希望它能起作用问题,但它确实没有,可能是因为该线程是关于数据帧而不是数据集,或者可能是因为 Scala 允许它在 Java 中是非法的?

最佳答案

可以考虑静态方法。简而言之:

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

expr() 将评估您列中的值。

这是正确导入的完整示例。抱歉,示例的大部分是关于创建数据框的。

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();

  }
}

关于java - Spark : subtract values in same DataSet row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54513657/

相关文章:

java - 用于 GWT 的静态 Google 地球 map

java - Java cms MAGNOLIA 是否可免费用于商业网站

python - IF Then ELSE 的 Spark 等价物

python - 按 Dataframe 中的位置替换数组中的元素 - Pyspark

java - Java 中的范围规则

java - 在 droid 中,我如何不仅捕获异常

scala - Spark 读取 HBase 与 java.lang.NoSuchMethodError : org. apache.hadoop.mapreduce.InputSplit.getLocationInfo 错误

scala - 如何使用spark获取hdfs目录的大小

python - pyspark使用lambda内的正则表达式分割字符串

scala - spark-csv 包中的 inferSchema