我正在使用spark结构化流媒体。我有一个Dataframe并添加了一个新列" current_ts"。
inpuDF.withColumn("current_ts", lit(System.currentTimeMillis()))
这不会更新当前纪元时间的每一行。当作业被移动时,它会更新相同的epcoh时间,从而使DF中的每一行具有相同的值。这适用于普通的火花作业。这是火花结构流媒体的问题吗?
答案 0 :(得分:1)
Well spark将您的转换记录为沿袭图,并且仅在调用某个动作时执行图形。所以它会调用
System.currentTimeMillis()
触发某些操作时。我不明白你发现什么令人困惑或者你想要实现什么。感谢。
答案 1 :(得分:1)
Spark有一个function to create a column with current timestamp。您的代码应如下所示:
import org.apache.spark.sql.functions
// ...
inpuDF.withColumn("current_ts", functions.current_timestamp())
答案 2 :(得分:0)
您的方法的问题是使用lit,它是文字函数或常量。
Spark会将其视为从驱动程序传递的常量。
因此,当您执行作业时,文字将根据您执行的时间进行评估。
所有记录具有相同的时间戳。
您需要改为使用功能。
current_timestamp()
应该可以。
答案 3 :(得分:0)
尝试一下
inpuDF.writeStream.partitionBy('current_ts')