【发布时间】:2020-08-07 20:01:45
【问题描述】:
我给出的数据框看起来像这样。 此数据框按日期排序,col1 只是一些随机值。
TEST_schema = StructType([StructField("date", StringType(), True),\
StructField("col1", IntegerType(), True),\
])
TEST_data = [('2020-08-01',3),('2020-08-02',1),('2020-08-03',-1),('2020-08-04',-1),('2020-08-05',3),\
('2020-08-06',-1),('2020-08-07',6),('2020-08-08',4),('2020-08-09',5)]
rdd3 = sc.parallelize(TEST_data)
TEST_df = sqlContext.createDataFrame(TEST_data, TEST_schema)
TEST_df.show()
+----------+----+
| date|col1|
+----------+----+
|2020-08-01| 3|
|2020-08-02| 1|
|2020-08-03| -1|
|2020-08-04| -1|
|2020-08-05| 3|
|2020-08-06| -1|
|2020-08-07| 6|
|2020-08-08| 4|
|2020-08-09| 5|
+----------+----+
LOGIC : Lead(col1) +1,如果 col1 ==-1,则从前一个值开始 Lead(col1) +2...
结果数据框将如下所示(想要的列是我想要的输出)
+----------+----+----+
| date|col1|WANT|
+----------+----+----+
|2020-08-01| 3| 2|
|2020-08-02| 1| 6|
|2020-08-03| -1| 5|
|2020-08-04| -1| 4|
|2020-08-05| 3| 8|
|2020-08-06| -1| 7|
|2020-08-07| 6| 5|
|2020-08-08| 4| 6|
|2020-08-09| 5| -1|
+----------+----+----+
让我们看看最后一行,其中 col1==5,5 前导 +1,即 want==6 (2020-08-08) 如果我们有 col==-1,那么我们再添加 +1,如果我们有 col==-1 重复两次,那么我们再添加 +2.. 这很难用语言来解释,最后因为它创建了最后一列而不是 null,所以用 -1 替换。我有一个图表
【问题讨论】:
标签: pyspark apache-spark-sql pyspark-dataframes