如果这个问题不明确,请告诉我,我可以提供更多详细信息。我的 DataBricks 环境附加到 Azure Synapse 实例。我们有大量的 ADLS 存储。 PySpark 脚本的第一部分根据 SQL 查询创建两个数据帧,这两个数据帧将在不同的服务器上运行。其中一个数据帧很小(相当于 30,000 条记录),另一个数据帧很大(相当于 10 亿条记录)。我们在“ID”(只是一个示例列名称)上对两个数据帧进行内部联接,脚本的其余部分仅使用联接的结果,在本例中始终具有 30,000 条或更少的记录。我们本质上是使用连接作为较大表的过滤器。我觉得仅仅为了过滤掉整个大表而拉入它一定是非常低效的。有没有更好的方法使用 PySpark 在 DataBricks 中执行此操作?
我只是将较小的表上传到保存较大表的服务器,但我们有安全限制,阻止我们这样做。
您可以考虑使用以下任一策略。
从 pyspark.sql.functions 导入广播
broadcast_small_df = 广播(small_df) result_df = large_df.join(broadcast_small_df, on=“ID”,how=“内部”)
num_partitions = 100 # 根据需要调整
重新分区_large_df = large_df.repartition(num_partitions, "ID") result_df = repartitioned_large_df.join(small_df, on="ID", how="inner")