我有两张桌子:
{users, orders}
在本例中,假设对于
users
表中,有100000个订单
orders
桌子
我必须使用pyspark为每个用户生成一个Orders语句。因此,单个用户将需要他/她自己的订单列表。此外,我需要通过电子邮件(例如)将此声明发送给真实世界的用户。
我的第一直觉是应用
DataFrame.foreach()
在
用户
数据帧。这样,我就可以依靠星火员工单独处理电子邮件发送。然而,我现在不知道获得每个用户订单的最佳方式。
我将很快尝试以下(伪代码):
users_df = <my entire users DataFrame>
orders_df = <my entire orders DataFrame>
def foreach_function(row):
user_id = row.user_id
user_orders_df = orders_df.select(f'user_id = {user_id}')
users_df.foreach(foreach_function)
我的理解是,如果我在
foreach
函数,在做这项工作时,我将利用Spark的可伸缩性。然而,我担心两件事:
-
如果我提前接受所有订单。。。
-
这样行吗?
-
我会吃得太多吗?我会接受那些不会处理它们的分区上的订单吗(不同的用户)。
-
如果我创建
orders_df
(已过滤)在foreach函数中。。。
最终的问题是:我如何才能有效地实现这个目标?
我还没有在这里尝试过任何东西。就在我们讲话的时候,我正在这样做,但我正遭受着选择麻痹症的折磨。
求你了,谢谢你。