df = pd.read_csv("imeis_events_march.csv")
imeis = df['imei'].unique().tolist()
for imei in imeis:
dfj = df.loc[df['imei']==imei]
# calculate feature
props = calculate_ratio(dfj)
我想使用 calculate_ratio
函数以高效的方式处理每个子数据帧。
有什么好的方法可以并行实现吗?
想要的结果是
imei:道具
对于每个 imei。
答案 0 :(得分:0)
您可以创建一个 PySpark 数据帧,通过 imei
group,然后使用 applyInPandas 将每个组作为单独的 Pandas 数据帧并行处理:< /p>
pdf = pd.read_csv("imeis_events_march.csv")
df = spark.createDataFrame(pdf)
def calculate_ratio(pandas_df):
pandas_df['ratio'] = 1.0 #implement the real logic here
return pandas_df
schema_with_ratio = "imei string, ...other columns..., ratio float"
df.groupBy("imei").applyInPandas(calculate_ratio, schema_with_ratio).show()
calculate_ratio
将由 Spark 使用 Pandas 数据帧为输入数据中的每个 imei
调用一次。
这种方法的一个缺点是每组 imei
必须完全适合一个 Spark 执行程序的内存,否则会发生 OutOfMemory 错误。