【问题标题】:Spark - Extracting date string from DateTypeSpark - 从 DateType 中提取日期字符串
【发布时间】:2018-10-23 07:42:28
【问题描述】:

我有一个 Row 对象,其中包含 DateType 类型的列之一。

我正在从此 Row 对象中提取单个字段值,如下所示:

val eventDate = row.getAs[DateType](0)
val recordCount = row.getAs[Long](1)

我想从 eventDate 中提取日期值的字符串表示。我怎样才能做到这一点? Intellij 建议了一个名为 formatted 的 eventDate 方法,我使用如下:

val eventDateString = row.getAs[DateType](0).formatted("yyyy-MM-dd")

但是,执行后,eventDateString 中的值是“yyyy-MM-dd”,而不是日期的实际值。如何以字符串表示形式获取实际日期值。

另外,我无法在以下链接的 Spark2 文档中找到 formatted(format:String) 方法。我想知道为什么 Intellij 在文档未显示此方法时显示此方法。请帮忙。

https://spark.apache.org/docs/2.2.1/api/java/org/apache/spark/sql/types/DateType.html

【问题讨论】:

    标签: apache-spark apache-spark-sql


    【解决方案1】:

    代码:

    val schema = StructType(List(new StructField("event_date", DateType)))
    val data = Seq(Row(Date.valueOf("2018-10-21")), Row(Date.valueOf("2018-10-22")))
    val df = spark.createDataFrame(spark.sparkContext.parallelize(data), schema)
    df.printSchema()
    df.show()
    
    //here it will cast date type to string type
    df.foreach { row =>
      println(row.getAs[String]("event_date"))
    }
    

    样本输出:

    root
     |-- event_date: date (nullable = true)
    
    +----------+
    |event_date|
    +----------+
    |2018-10-21|
    |2018-10-22|
    +----------+
    
    2018-10-21
    2018-10-22
    

    注意:使用 Spark 2.2.0 和 Scala 2.11.8 测试

    【讨论】:

    • 谢谢,请参考下面的答案。我在演员阵容中遇到了一个例外。
    • 你能试试这个吗? println(row.getAs[Date]("event_date").toString())。两种方式对我来说都很好。你能给出你正在工作的 Scala 和 spark 版本吗?所以我会尝试模拟同样的错误。 @Ankur
    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2020-08-14
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多