【发布时间】:2018-11-28 17:23:18
【问题描述】:
我有一个带有架构的数据框 -
|-- record_id: integer (nullable = true)
|-- Data1: string (nullable = true)
|-- Data2: string (nullable = true)
|-- Data3: string (nullable = true)
|-- Time: timestamp (nullable = true)
我想检索数据中的最后一条记录,按 record_id 和最大时间戳分组。
所以,如果数据最初是这样的:
+----------+---------+---------+---------+-----------------------+
|record_id |Data1 |Data2 |Data3 | Time|
+----------+---------+-------------------------------------------+
| 1 | aaa | null | null | 2018-06-04 21:51:53.0 |
| 1 | null | bbbb | cccc | 2018-06-05 21:51:53.0 |
| 1 | aaa | null | dddd | 2018-06-06 21:51:53.0 |
| 1 | qqqq | wwww | eeee | 2018-06-07 21:51:53.0 |
| 2 | aaa | null | null | 2018-06-04 21:51:53.0 |
| 2 | aaaa | bbbb | cccc | 2018-06-05 21:51:53.0 |
| 3 | aaa | null | dddd | 2018-06-06 21:51:53.0 |
| 3 | aaaa | bbbb | eeee | 2018-06-08 21:51:53.0 |
我希望输出是
+----------+---------+---------+---------+-----------------------+
|record_id |Data1 |Data2 |Data3 | Time|
+----------+---------+-------------------------------------------+
| 1 | qqqq | wwww | eeee | 2018-06-07 21:51:53.0 |
| 2 | aaaa | bbbb | cccc | 2018-06-05 21:51:53.0 |
| 3 | aaaa | bbbb | eeee | 2018-06-08 21:51:53.0 |
我尝试在同一个流上加入 2 个查询,类似于答案 here。 我的代码(其中 df1 是原始数据框):
df1=df1.withWatermark("Timetemp", "2 seconds")
df1.createOrReplaceTempView("tbl")
df1.printSchema()
query="select t.record_id as record_id, max(t.Timetemp) as Timetemp from tbl t group by t.record_id"
df2=spark.sql(query)
df2=df2.withWatermark("Timetemp", "2 seconds")
qws=df1.alias('a').join(df2.alias('b'),((col('a.record_id')==col('b.record_id')) & (col("a.Timetemp")==col("b.Timetemp"))))
query = qws.writeStream.outputMode('append').format('console').start()
query.awaitTermination()
我不断收到此错误:
当流式DataFrames/DataSets上存在流式聚合时不支持追加输出模式;;
当有明显水印时。可以做什么? 我不能使用窗口,因为流媒体不支持非基于时间的窗口。
【问题讨论】:
-
我猜你应该先彻底阅读spark.apache.org/docs/latest/…
-
它似乎与 stackoverflow.com/questions/48740437/… 重复,但不确定
-
不,不是。我已经阅读了文章和 stackoverflow 链接。我无法更改输出模式,因为联接查询仅在附加模式下工作。至于这篇文章,我无法弄清楚错误,因此也无法解决这个问题。无论如何谢谢!
标签: apache-spark apache-spark-sql pyspark-sql spark-structured-streaming