pyspark mysql rdd_如何遍历pyspark中Dataframe/RDD的每一行。

我想根据该组的上一行中该列的值设置列的值。然后这个更新的值将被用在下一行。如何遍历pyspark中Dataframe/RDD的每一行。

我有以下数据帧

id | start_date|sort_date | A | B |

-----------------------------------

1 | 1/1/2017 | 31-01-2015 | 1 | 0 |

1 | 1/1/2017 | 28-02-2015 | 0 | 0 |

1 | 1/1/2017 | 31-03-2015 | 1 | 0 |

1 | 1/1/2017 | 30-04-2015 | 1 | 0 |

1 | 1/1/2017 | 31-05-2015 | 1 | 0 |

1 | 1/1/2017 | 30-06-2015 | 1 | 0 |

1 | 1/1/2017 | 31-07-2015 | 1 | 0 |

1 | 1/1/2017 | 31-08-2015 | 1 | 0 |

1 | 1/1/2017 | 30-09-2015 | 0 | 0 |

2 | 1/1/2017 | 31-10-2015 | 1 | 0 |

2 | 1/1/2017 | 30-11-2015 | 0 | 0 |

2 | 1/1/2017 | 31-12-2015 | 1 | 0 |

2 | 1/1/2017 | 31-01-2016 | 1 | 0 |

2 | 1/1/2017 | 28-02-2016 | 1 | 0 |

2 | 1/1/2017 | 31-03-2016 | 1 | 0 |

2 | 1/1/2017 | 30-04-2016 | 1 | 0 |

2 | 1/1/2017 | 31-05-2016 | 1 | 0 |

2 | 1/1/2017 | 30-06-2016 | 0 | 0 |

输出:

id | start_date|sort_date | A | B | C

---------------------------------------

1 | 1/1/2017 | 31-01-2015 | 1 | 0 | 1

1 | 1/1/2017 | 28-02-2015 | 0 | 0 | 0

1 | 1/1/2017 | 31-03-2015 | 1 | 0 | 1

1 | 1/1/2017 | 30-04-2015 | 1 | 0 | 2

1 | 1/1/2017 | 31-05-2015 | 1 | 0 | 3

1 | 1/1/2017 | 30-06-2015 | 1 | 0 | 4

1 | 1/1/2017 | 31-07-2015 | 1 | 0 | 5

1 | 1/1/2017 | 31-08-2015 | 1 | 0 | 6

1 | 1/1/2017 | 30-09-2015 | 0 | 0 | 0

2 | 1/1/2017 | 31-10-2015 | 1 | 0 | 1

2 | 1/1/2017 | 30-11-2015 | 0 | 0 | 0

2 | 1/1/2017 | 31-12-2015 | 1 | 0 | 1

2 | 1/1/2017 | 31-01-2016 | 1 | 0 | 2

2 | 1/1/2017 | 28-02-2016 | 1 | 0 | 3

2 | 1/1/2017 | 31-03-2016 | 1 | 0 | 4

2 | 1/1/2017 | 30-04-2016 | 1 | 0 | 5

2 | 1/1/2017 | 31-05-2016 | 1 | 0 | 6

2 | 1/1/2017 | 30-06-2016 | 0 | 0 | 0

集团是ID和日期的

列C是衍生基于列A和B.

如果A == 1且B == 0,则C从前一行+ 1导出C.

还有其他一些条件,但我正在努力与这部分。

假设我们在数据框中有一个sort_date列。

我尝试以下查询:

SELECT

id,

date,

sort_date,

lag(A) OVER (PARTITION BY id, date ORDER BY sort_date) as prev,

CASE

WHEN A=1 AND B= 0 THEN 1

WHEN A=1 AND B> 0 THEN prev +1

ELSE 0

END AS A

FROM

Table

这是我做的UDAF

val myFunc = new MyUDAF

val w = Window.partitionBy(col("ID"), col("START_DATE")).orderBy(col("SORT_DATE"))

val df = df.withColumn("C", myFunc(col("START_DATE"), col("X"),

col("Y"), col("A"),

col("B")).over(w))

PS:我使用的Spark 1.6

+0

您可以使用** Window函数**与Spark SQL。 –

+0

你可以添加你试过的代码吗? –

+0

请改善问题:你能否再解释一下你试图达到的目标,到目前为止你做了什么,你的输入是什么,你的期望输出是什么,你想在RDD中这样做,就像标题所说或者在作为专栏文字的数据框表明了什么?你是什​​么意思一个组?你的意思是一个groupby?你想如何分类? –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值