我正在尝试将具有某种格式(YYYY-mm-dd)日期的字符串列转换为日期/时间戳列。但是不能通过使用sql的str_to_date函数来实现。
我已经遵循了这个Convert date from String to Date format in Dataframes,但它适用于单个值,而我希望将日期时间戳转换应用于列的所有行,所以我尝试了以下
sparkDF = spark.createDataFrame([('a', '2018-01-20'), ('b', '2018-01-21'), ('c', '2018-01-22')], ['name','enroll_DATE'])
>>> sparkDF.show()
+----+-----------+
|name|enroll_DATE|
+----+-----------+
| a| 2018-01-20|
| b| 2018-01-21|
| c| 2018-01-22|
+----+-----------+
>>> sparkDF.printSchema()
root
|-- name: string (nullable = true)
|-- enroll_DATE: string (nullable = true)
sparkDF.registerTempTable('data')
res = spark.sql("select name, enroll_DATE, TO_DATE(CAST(UNIX_TIMESTAMP(enroll_DATE, '%Y-%m-%d') as TIMESTAMP)) as converted_ED from data ")
但是将converted_ED列的所有值都设为null。
显然有更好的方法来处理DataFrame操作,但我有限制(或你可以说是约束)以sparkDataframe转换的方式来做这件事。基本上spark.sql对我来说是强制性的。
根据链接,如果可以对单个date_string值执行相同操作,那么可能有一种方法已经存在(我不知道)在列上执行相同操作。
请建议。感谢。
通过更改格式字符串来自'%Y-%m-%d'到了&YYYY-mm-dd',转换工作但是很奇怪(两个日期不同!!!!)
res = spark.sql("SELECT name, enroll_DATE, TO_DATE(CAST(UNIX_TIMESTAMP(enroll_DATE, 'YYYY-mm-dd') AS TIMESTAMP)) AS newdate from data")
>>> res.show()
+----+-----------+----------+
|name|enroll_DATE| newdate|
+----+-----------+----------+
| a| 2018-01-20|2017-12-31| ### two dates are different
| b| 2018-01-21|2017-12-31|
| c| 2018-01-22|2017-12-31|
+----+-----------+----------+
>>> res.printSchema()
root
|-- name: string (nullable = true)
|-- enroll_DATE: string (nullable = true)
|-- newdate: date (nullable = true)
但仍然在寻找同样的事情,因为%Y-%d-%m'格式也是(如果有任何解决方案。)。
答案 0 :(得分:0)
以下仅适用于'YYYY-mm-dd'格式,但对于其他格式(如dd / mm / YYYY
)则失败 res = spark.sql("SELECT name, enroll_DATE, TO_DATE(CAST(enroll_DATE AS TIMESTAMP)) AS newdate from data")
>>> res.show()
+----+-----------+----------+
|name|enroll_DATE| newdate|
+----+-----------+----------+
| a| 2018-01-20|2018-01-20|
| b| 2018-01-21|2018-01-21|
| c| 2018-01-22|2018-01-22|
+----+-----------+----------+
>>> res.printSchema()
root
|-- name: string (nullable = true)
|-- enroll_DATE: string (nullable = true)
|-- newdate: date (nullable = true)
答案 1 :(得分:0)
public function getBase64ImageSize($base64Image){ //return memory size in B, KB, MB
try{
$size_in_bytes = (int) (strlen(rtrim($base64Image, '=')) * 3 / 4);
$size_in_kb = $size_in_bytes / 1024;
$size_in_mb = $size_in_kb / 1024;
return $size_in_mb;
}
catch(Exception $e){
return $e;
}
}