我正在使用spark Structured。我有一个数据帧,并添加了一个新列"current_ts“。
inpuDF.withColumn("current_ts", lit(System.currentTimeMillis()))
这不会使用当前纪元时间更新每一行。当作业被触发时,它更新相同的epcoh时间,从而使DF中的每一行都具有相同的值。这在正常的spark工作中效果很好。这是spark structured的问题吗?
发布于 2018-04-01 16:47:34
spark将你的转换记录为谱系图,并且只在某个动作被调用时执行该图。因此,它将调用
System.currentTimeMillis()
当某个动作被触发时。我不理解的是,你觉得其中令人困惑的是什么,或者你试图实现的是什么。谢谢。
发布于 2018-04-08 22:58:09
Spark有一个function to create a column with current timestamp。您的代码应如下所示:
import org.apache.spark.sql.functions
// ...
inpuDF.withColumn("current_ts", functions.current_timestamp())
发布于 2019-03-20 08:44:30
您的方法的问题是使用lit,它是文字函数或常量。Spark会将其视为从驱动程序传递过来的常量。因此,当您执行作业时,文字将根据您执行的时间进行计算。所有记录都有相同的时间戳。您需要使用函数来代替。current_timestamp()
应该可以工作。
https://stackoverflow.com/questions/49593591
复制相似问题