“withColumn”的 Spark Date 列初始值设定项?

Posted

技术标签:

【中文标题】“withColumn”的 Spark Date 列初始值设定项?【英文标题】:Spark Date column initializers for "withColumn"? 【发布时间】:2018-05-10 19:06:22 【问题描述】:

这里是 Scala 2.11。我有以下数据库表:

[input]
===
id BIGINT UNSIGNED NOT NULL,
name VARCHAR(50) NOT NULL,
rank INT NOT NULL

我使用以下 Spark 代码阅读的内容:

val inputDf = sqlContext().read
    .format("blah whatever")
    .option("url", "jdbc://blah://whatever")
    .option("query", "SELECT * FROM input WHERE id < 500")
    .load()

但是我希望我的inputDf 包含一个数据库中不存在的新列lastRanOn,这将是一个Java Date,其值为当前时间(所以new Date()) .我能想到的最接近的是:

inputDf.withColumn("lastRanOn", new Date())

但是这给了我编译器错误:

“类型不匹配,预期:列,实际:日期”

有什么想法可以做到这一点吗?

【问题讨论】:

您可以使用lit() 函数将值转换为列。但是,它并不支持所有类型。您将不得不使用 java.sql 类型。 【参考方案1】:

第二个参数必须是Column。你可以使用current_date

import org.apache.spark.sql.functions.current_date

inputDf.withColumn("lastRanOn", current_date)

【讨论】:

以上是关于“withColumn”的 Spark Date 列初始值设定项?的主要内容,如果未能解决你的问题,请参考以下文章

在 spark scala 中为 withcolumn 编写通用函数

Spark 转换生成未来日期

在 Spark Scala 中使用“withColumn”函数的替代方法

spark dataFrame withColumn

Spark DAG 与“withColumn”和“select”不同

Apache Spark 中的多个 withColumn 错误