【问题标题】:Combining two columns, casting two timestamp and selecting from df causes no error, but casting one column to timestamp and selecting causes error合并两列,转换两个时间戳并从 df 中选择不会导致错误,但将一列转换为时间戳并选择会导致错误
【发布时间】:2019-07-21 19:59:01
【问题描述】:

说明

当我尝试选择转换为 unix_timestamp 的列,然后从数据帧中选择时间戳时,会出现 sparkanalysisexception 错误。 请参阅下面的链接。

但是,当我组合两列,然后将组合转换为 unix_timestamp 和时间戳类型,然后从 df 中选择时,没有错误。

不同的案例

错误: How to extract year from a date string?

没有错误

import org.apache.spark.sql.functions._
import org.apache.spark.sql._
import org.apache.spark.sql.types._
val spark: SparkSession = SparkSession.builder().
  appName("myapp").master("local").getOrCreate()

case class Person(id: Int, date: String, time:String)
import spark.implicits._

val mydf: DataFrame = Seq(Person(1,"9/16/13", "11:11:11")).toDF()
//solution.show()
//column modificaton

val datecol: Column = mydf("date")
val timecol: Column = mydf("time")
val newcol: Column = unix_timestamp(concat(datecol,lit(" "),timecol),"MM/dd/yy").cast(TimestampType)

mydf.select(newcol).show()

结果

预期: 错误火花分析,在 mydf 中找不到 unix_timestamp(concat(....))

实际

+------------------------------------------------------------------+
|CAST(unix_timestamp(concat(date,  , time), MM/dd/yy) AS TIMESTAMP)|
+------------------------------------------------------------------+
|                                              2013-09-16 00:00:...|

【问题讨论】:

    标签: scala apache-spark apache-spark-sql


    【解决方案1】:

    这些看起来并不完全不同。在错误的情况下,您有一个更改了列名的新数据框。见下文:-

    val select_df: DataFrame = mydf.select(unix_timestamp(mydf("date"),"MM/dd/yy").cast(TimestampType))
    select_df.select(year($"date")).show()
    

    这里,select_df 数据框已将列名从 date 更改为 cast(unix_timestamp(mydf("date"),"MM/dd/yy")) as Timestamp

    虽然在上面提到的情况下,你只是在定义一个新列:-

    val newcol: Column = unix_timestamp(concat(datecol,lit(" "),timecol),"MM/dd/yy").cast(TimestampType)
    

    然后您使用它从您的数据框中进行选择,从而给出预期的结果。

    希望这能让事情更清楚。

    【讨论】:

      猜你喜欢
      • 2021-03-25
      • 1970-01-01
      • 2012-06-28
      • 2014-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-21
      • 1970-01-01
      相关资源
      最近更新 更多