【发布时间】:2021-10-15 19:10:15
【问题描述】:
我正在尝试在地图回调函数中查询数据框,并使用基于多行和多列的计算创建一个新列。
DF 看起来像这样
| datum | start | uhrzeit | quittierung |
|---|---|---|---|
| 2021-01-01 | XYZ | 08:00:00 | 2021-01-01 09:00:00 |
| 2021-01-01 | XYZ | 07:05:00 | 2021-01-01 09:05:00 |
| 2021-01-01 | XYZ | 07:05:00 | 2021-01-01 09:05:00 |
| 2021-01-01 | XYZ | 10:00:00 | 2021-01-01 10:05:00 |
| 2021-01-01 | XYZ | 10:00:00 | 2021-01-01 11:00:00 |
df = SPARK_DATAFRAME
def func1(x):
count = df.filter(df.datum == x.datum).filter(df.start == x.start).filter(df.uhrzeit < x.uhrzeit).filter(df.quittierung[12:19] > x.uhrzeit).count()
return (x.datum, x.start, count)
rdd2=df.rdd.map(lambda x: (func1(x)))
df2=rdd2.toDF(["datum", "start", "count"])
df2.show()
通过这样做,我收到以下错误消息:
PicklingError: 无法序列化对象:TypeError: can't pickle _thread.RLock objects
有人可以帮助我如何将原始数据帧扩展为某些列,其中值基于对完整数据帧的查询?
示例结果
| datum | start | uhrzeit | quittierung | count |
|---|---|---|---|---|
| 2021-01-01 | XYZ | 08:00:00 | 2021-01-01 09:00:00 | 2 |
| 2021-01-01 | XYZ | 07:05:00 | 2021-01-01 09:05:00 | 0 |
| 2021-01-01 | XYZ | 07:06:00 | 2021-01-01 09:05:00 | 1 |
| 2021-01-01 | XYZ | 10:00:00 | 2021-01-01 10:04:00 | 0 |
| 2021-01-01 | XYZ | 10:05:00 | 2021-01-01 11:00:00 | 0 |
【问题讨论】: