Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spark:减去同一数据集行中的值_Java_Apache Spark_Apache Spark Sql - Fatal编程技术网

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

Java Spark:减去同一数据集行中的值,java,apache-spark,apache-spark-sql,Java,Apache Spark,Apache Spark Sql,给定以下数据集: | title | start | end | bla | 10 | 30 我想找出这两个数字之间的差异(开始-结束),并将它们设置到一个新列中,这样看起来就像: | title | time_spent | | bla | 20 | 数据类型为数据集 dataset=dataset.withColumn(“millis-speed:”,col(“end”)-col(“start”).as(“Time-speed”) 我希望这能起作用,正如我在问题中看到的,

给定以下数据集:

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

| title | time_spent |
 | bla   | 20 |
数据类型为
数据集

dataset=dataset.withColumn(“millis-speed:”,col(“end”)-col(“start”).as(“Time-speed”)

我希望这能起作用,正如我在问题中看到的,但是它没有,也许是因为线程是关于DataFrames而不是数据集,或者是因为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();

  }
}
package net.jgp.books.sparkInAction.ch12.lab990其他;
导入静态org.apache.spark.sql.functions.expr;
导入java.util.ArrayList;
导入java.util.List;
导入org.apache.spark.sql.Dataset;
导入org.apache.spark.sql.Row;
导入org.apache.spark.sql.RowFactory;
导入org.apache.spark.sql.SparkSession;
导入org.apache.spark.sql.types.DataTypes;
导入org.apache.spark.sql.types.StructField;
导入org.apache.spark.sql.types.StructType;
/**
*expr()的使用。
* 
*@author jgp
*/
公共类ExprApp{
/**
*main()是应用程序的入口点。
* 
*@param args
*/
公共静态void main(字符串[]args){
ExprApp app=新的ExprApp();
app.start();
}
/**
*处理代码。
*/
私有void start(){
//在本地主机上创建会话
SparkSession spark=SparkSession.builder()
.appName(“所有连接!”)
.master(“本地”)
.getOrCreate();
StructType架构=数据类型。createStructType(新的StructField[]{
DataTypes.createStructField(
“头衔”,
DataTypes.StringType,
假),,
DataTypes.createStructField(
“开始”,
DataTypes.IntegerType,
假),,
DataTypes.createStructField(
“结束”,
DataTypes.IntegerType,
假)});
列表行=新建ArrayList();
添加(RowFactory.create(“bla”,10,30));
数据集df=spark.createDataFrame(行、模式);
df.show();
df=df
.withColumn(“花费的时间”,expr(“结束-开始”))
.删除(“开始”)
.放弃(“结束”);
df.show();
}
}
expr(“…”)
是我需要的方法,
函数。*
包确实值得深入研究。好的,我的书《火花行动,2e》()的讨厌的插头,但我正在编写一个完整的附录,作为那些很棒函数的参考:)。我认为,他们的价值太低了。