Spark 在字符串中获取当前日期
Spark getting current date in string
我有下面的代码来获取正确格式的日期,然后能够附加到文件名字符串。
%scala
// Getting the date for the file name
import org.apache.spark.sql.functions.{current_timestamp, date_format}
val dateFormat = "yyyyMMdd_HHmm"
val dateValue = spark.range(1).select(date_format(current_timestamp,dateFormat)).collectAsList().get(0).get(0)
val fileName = "TestFile_" + dateValue+ ".csv"
我觉得这太笨拙了,有没有更简单的方法来简单地将当前日期转换为字符串?
在 date_format 之后,您可以将其转换为匿名数据集,然后使用第一个函数将其转换为字符串变量。看看这个
scala> val dateFormat = "yyyyMMdd_HHmm"
dateFormat: String = yyyyMMdd_HHmm
scala> val dateValue = spark.range(1).select(date_format(current_timestamp,dateFormat)).as[(String)].first
dateValue: String = 20190320_2341
scala> val fileName = "TestFile_" + dateValue+ ".csv"
fileName: String = TestFile_20190320_2341.csv
scala>
无需创建 df,您可以使用 expr() 并获得结果。
scala> val ts = (current_timestamp()).expr.eval().toString.toLong
ts: Long = 1553106289387000
scala> new java.sql.Timestamp(ts/1000)
res74: java.sql.Timestamp = 2019-03-20 23:54:49.387
以上给出了普通 scala 的结果,因此您可以使用 date/time 库进行格式化
编辑1:
这是另一种方法,使用普通 Scala 中的格式。
scala> val dateFormat = "yyyyMMdd_HHmm"
dateFormat: String = yyyyMMdd_HHmm
scala> val ts = (current_timestamp()).expr.eval().toString.toLong
ts: Long = 1553108012089000
scala> val dateValue = new java.sql.Timestamp(ts/1000).toLocalDateTime.format(java.time.format.DateTimeFormatter.ofPattern(dateFormat))
dateValue: String = 20190321_0023
scala> val fileName = "TestFile_" + dateValue+ ".csv"
fileName: String = TestFile_20190321_0023.csv
scala>
使用 pyspark
>>> dateFormat = "%Y%m%d_%H%M"
>>> import datetime
>>> ts=spark.sql(""" select current_timestamp() as ctime """).collect()[0]["ctime"]
>>> ts.strftime(dateFormat)
'20190328_1332'
>>> "TestFile_" +ts.strftime(dateFormat) + ".csv"
'TestFile_20190328_1332.csv'
>>>
我有下面的代码来获取正确格式的日期,然后能够附加到文件名字符串。
%scala
// Getting the date for the file name
import org.apache.spark.sql.functions.{current_timestamp, date_format}
val dateFormat = "yyyyMMdd_HHmm"
val dateValue = spark.range(1).select(date_format(current_timestamp,dateFormat)).collectAsList().get(0).get(0)
val fileName = "TestFile_" + dateValue+ ".csv"
我觉得这太笨拙了,有没有更简单的方法来简单地将当前日期转换为字符串?
在 date_format 之后,您可以将其转换为匿名数据集,然后使用第一个函数将其转换为字符串变量。看看这个
scala> val dateFormat = "yyyyMMdd_HHmm"
dateFormat: String = yyyyMMdd_HHmm
scala> val dateValue = spark.range(1).select(date_format(current_timestamp,dateFormat)).as[(String)].first
dateValue: String = 20190320_2341
scala> val fileName = "TestFile_" + dateValue+ ".csv"
fileName: String = TestFile_20190320_2341.csv
scala>
无需创建 df,您可以使用 expr() 并获得结果。
scala> val ts = (current_timestamp()).expr.eval().toString.toLong
ts: Long = 1553106289387000
scala> new java.sql.Timestamp(ts/1000)
res74: java.sql.Timestamp = 2019-03-20 23:54:49.387
以上给出了普通 scala 的结果,因此您可以使用 date/time 库进行格式化
编辑1:
这是另一种方法,使用普通 Scala 中的格式。
scala> val dateFormat = "yyyyMMdd_HHmm"
dateFormat: String = yyyyMMdd_HHmm
scala> val ts = (current_timestamp()).expr.eval().toString.toLong
ts: Long = 1553108012089000
scala> val dateValue = new java.sql.Timestamp(ts/1000).toLocalDateTime.format(java.time.format.DateTimeFormatter.ofPattern(dateFormat))
dateValue: String = 20190321_0023
scala> val fileName = "TestFile_" + dateValue+ ".csv"
fileName: String = TestFile_20190321_0023.csv
scala>
使用 pyspark
>>> dateFormat = "%Y%m%d_%H%M"
>>> import datetime
>>> ts=spark.sql(""" select current_timestamp() as ctime """).collect()[0]["ctime"]
>>> ts.strftime(dateFormat)
'20190328_1332'
>>> "TestFile_" +ts.strftime(dateFormat) + ".csv"
'TestFile_20190328_1332.csv'
>>>