繁体   English   中英

如何在.withColumn函数中获取列的Integer值? [Spark-Scala]

[英]How to get the Integer value of a column in .withColumn function? [Spark - Scala]

我需要使用date_add()函数将90天添加到数据框的列中。 该函数正常工作,但仅当我对90进行硬编码时才有效。如果数字在另一列中并且引用了该数字,则该函数会要求我提供一个整数才能工作。

此代码有效:

.withColumn("DATE_SUM_COLUMN",date_add(col("DATE_COLUMN"),90))

此代码不:

.withColumn("DATE_SUM_COLUMN",date_add(col("DATE_COLUMN"),col("number")))

谢谢。

请在此处尝试此操作,我将日期转换为秒,将天列转换为秒,并对两个columnns求和。 同样,我们必须将最终结果转换为日期格式。 date是我的日期栏, add是日期栏要add的天数

import org.apache.spark.sql.functions._

.withColumn("new col", unix_timestamp($"date", "yyyy-MM-dd") + col("add")*24*60*60)

您仍然可以使用expr("date_add(date_column, days_to_add)")函数来评估Spark SQL字符串:

import java.sql.Date

import com.holdenkarau.spark.testing.{DataFrameSuiteBase, SharedSparkContext}
import org.scalatest.FlatSpec
import org.apache.spark.sql.functions.expr

class TestSo2 extends FlatSpec with SharedSparkContext with DataFrameSuiteBase {
  "date_add" should "add number of dates specified as Column" in {
    import spark.implicits._
    val df = Seq(
      (Date.valueOf("2019-01-01"), 31),
      (Date.valueOf("2019-01-01"), 32)
    ).toDF("date_column", "days_to_add")
    df.show()

    /**
     * +-----------+-----------+
     * |date_column|days_to_add|
     * +-----------+-----------+
     * | 2019-01-01|         31|
     * | 2019-01-01|         32|
     * +-----------+-----------+
     */

    df.
      withColumn(
        "next_date",
        expr("date_add(date_column, days_to_add)")
      ).
      show

    /**
     * +-----------+-----------+----------+
     * |date_column|days_to_add| next_date|
     * +-----------+-----------+----------+
     * | 2019-01-01|         31|2019-02-01|
     * | 2019-01-01|         32|2019-02-02|
     * +-----------+-----------+----------+
     */
  }
}

我不知道为什么Spark开发人员没有将其作为Scala API的一部分的原因。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM