scala - 如何使用 Spark 在 DataFrame 中添加额外的日期列?
问题描述
我有变量,例如:
val loadingDate: = LocalDateTime.of(2020, 1, 2, 0, 0, 0)
我需要使用这个变量的值添加一个额外的列。
当我尝试这样做时:
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
DF.withColumn("dttm", expr(s"$loadingDate.format(formatter)}").cast("timestamp"))
我收到这样的错误:
Exception in thread "main" java.lang.reflect.InvocationTargetException
Caused by: org.apache.spark.sql.catalyst.parser.ParseException
mismutched input '00' expecting <EOF>(line 1, pos 11)
==SQL==
2020-01-02 00:00:00
-------------^^^
我可以使用 LocalDateTime 类型的变量在 Spark 中添加额外的列吗?还是我必须使用其他类型?
我需要从外部系统获取日期并在 Spark 中使用此日期。我怎样才能以最好的方式做到这一点?使用哪些类型?
解决方案
您可以使用解析后的字符串并使用函数val dateString = s"$loadingDate.format(formatter)"
将其转换为 Spark ,首先您必须将 String 转换为文字(或者换句话说,将您的字符串表示为一列),这样做使用.DateType
to_date()
lit(dateString)
val date: LocalDateTime = LocalDateTime.of(2020, 1, 2, 0,0, 0)
val formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")
val formattedDate = date.format(formatter).
val dfWithYourDate = df.withColumn("your_date", to_date(lit(formattedDate), "yyyy-MM-dd HH:mm:ss"))
如果您需要TimestampType
代替to_date()
使用功能to_timestamp()
推荐阅读
- uwp - 屏幕截图视频颜色比屏幕上的颜色更亮或更暗
- opengl-es - WebGL2 - 在任意位置写入纹理/缓冲区 - OpenGL imageStore 等效
- sql - 如何忽略表中行之间的前后值
- css - 如果在angular8中用完工具栏,如何换行
- python - 如何在 Django 中组织缓存?
- javascript - 如何停止/配置 Neovis Physics
- api - Flutter:DioError [DioErrorType.DEFAULT]:RangeError(索引):无效值:只有有效值为0:
- firebase - Firebase 身份验证与 Flutter 中的存储相结合
- swift - Xcode:“来自调试器的消息:无法附加”
- laravel - Laravel 页面重定向显示 404 错误