【发布时间】:2020-01-19 13:13:37
【问题描述】:
所以我有以下 CSV 文件:
Timestamp,Point,Value
2019-09-01,A,1
2019-09-01,B,2
2019-09-02,A,1
2019-09-02,B,2
2019-09-03,A,3
2019-09-03,B,4
2019-09-04,A,3
2019-09-04,B,4
2019-09-05,A,1
2019-09-05,B,2
我正在使用以下代码在 Spark 2.4.3(Azure 上的 Databricks 5.4)上阅读它:
val df = spark
.read
.format("csv")
.option("header", "true")
.option("inferSchema", "true")
.load("/test-data/data.csv")
我得到一个具有以下架构的数据框:
df:org.apache.spark.sql.DataFrame
Timestamp:timestamp
Point:string
Value:double
此文件包含在不同时间点读取不同“点”的值。在此示例中,A 和 B 每 1 天有一次读数,但其中一些值与之前的读数相同。
我需要应用一个转换,该转换将只保留其 Value 列与先前读数相比已更改为同一点的行。
|Timestamp |Point|Value|
|----------|-----|-----|
|2019-09-01|A |1 | // A = 1
|2019-09-01|B |2 | // B = 2
|2019-09-02|A |1 | // A unchanged, should be removed
|2019-09-02|B |2 | // B unchanged, should be removed
|2019-09-03|A |3 | // A = 3
|2019-09-03|B |4 | // B = 4
|2019-09-04|A |3 | // A unchanged, should be removed
|2019-09-04|B |4 | // B unchanged, should be removed
|2019-09-05|A |1 | // A = 1
|2019-09-05|B |2 | // B = 2
在这个简化的例子中,我想要一个如下的数据框:
|Timestamp |Point|Value|
|----------|-----|-----|
|2019-09-01|A |1 |
|2019-09-01|B |2 |
|2019-09-03|A |3 |
|2019-09-03|B |4 |
|2019-09-05|A |1 |
|2019-09-05|B |2 |
【问题讨论】:
标签: scala dataframe apache-spark apache-spark-sql