我试图在一个map回调函数中查询一个数据框,并创建一个基于多行和多列计算的新列。
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.groupby("datum", "start").count().show()
不会给你你正在寻找的结果?或者你真的需要使用rdd.map
吗?
错误的原因是spark试图序列化func1
函数,但是在func1
内部,您有原始数据帧,这是不可序列化的。
您可以尝试使用group by和Pandas UDF,如下所示:
df = SPARK_DATAFRAME
@pandas_udf(df.schema, functionType=PandasUDFType.GROUPED_MAP)
def func1(pdf):
count = pdf.loc["same filtering but in Pandas"].count()
return (count)
Result= df.groupBy(['datum', 'start']).apply(func1)
这个方向应该有办法