Spark数据帧添加新列问题 - 结构化流媒体

时间:2018-04-01 00:00:28

标签: apache-spark spark-structured-streaming

我正在使用spark结构化流媒体。我有一个Dataframe并添加了一个新列" current_ts"。

inpuDF.withColumn("current_ts", lit(System.currentTimeMillis()))

这不会更新当前纪元时间的每一行。当作业被移动时,它会更新相同的epcoh时间,从而使DF中的每一行具有相同的值。这适用于普通的火花作业。这是火花结构流媒体的问题吗?

4 个答案:

答案 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)

您的方法的问题是使用l​​it,它是文字函数或常量。 Spark会将其视为从驱动程序传递的常量。 因此,当您执行作业时,文字将根据您执行的时间进行评估。 所有记录具有相同的时间戳。 您需要改为使用功能。 current_timestamp()应该可以。

答案 3 :(得分:0)

尝试一下

inpuDF.writeStream.partitionBy('current_ts')