spark:减去同一数据集行中的值

db2dz4w8  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(318)

给定以下数据集:

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

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

| title | time_spent |
 | bla   | 20 |

数据类型为
Dataset dataset = dataset.withColumn("millis spent: ", col("end") - col("start")).as("Time spent"); 正如我在这个问题中看到的那样,我希望它能工作,但它确实工作了,可能是因为线程是关于Dataframe而不是数据集的,或者可能是因为scala允许它在java中的非法位置工作?

ebdffaop

ebdffaop1#

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

import static org.apache.spark.sql.functions.expr;
...
df = df
    .withColumn("time_spent", expr("end - start"))
    .drop("start")
    .drop("end");
``` `expr()` 将计算列中的值。
下面是正确导入的完整示例。抱歉,这个示例的大部分内容是关于创建Dataframe的。

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

}
}

相关问题