亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Spark:減去同一數據集行中的值

Spark:減去同一數據集行中的值

眼眸繁星 2022-06-04 16:16:50
給定以下數據集:| 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");我希望它能夠工作的,但它沒有,可能是因為該線程是關于 DataFrames 而不是 DataSets,或者可能是因為 Scala 允許它在 Java 中是非法的?
查看完整描述

1 回答

?
千巷貓影

TA貢獻1829條經驗 獲得超7個贊

您可以考慮靜態方法。簡而言之:


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


  }

}


查看完整回答
反對 回復 2022-06-04
  • 1 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號