Python 3.x 如何将每个数据帧分区写入不同的表中

Python 3.x 如何将每个数据帧分区写入不同的表中,python-3.x,pyspark,azure-databricks,Python 3.x,Pyspark,Azure Databricks,我使用Databricks连接到Eventhub,其中来自Eventhub的每条消息可能与另一条消息非常不同 在消息中,我有一个主体和一个id 我在寻找性能,所以我避免收集数据或进行不必要的处理,而且我希望通过分区并行地进行保存。然而,我不知道如何以正确的方式做到这一点 我想将每个ID的主体批量附加到不同的特定表中,该ID将为我提供需要保存在正确表中的信息。为此,我尝试了两种方法: 分区:RepartitionnumPartitions,ID->ForeachPartition 分组:group

我使用Databricks连接到Eventhub,其中来自Eventhub的每条消息可能与另一条消息非常不同

在消息中,我有一个主体和一个id

我在寻找性能,所以我避免收集数据或进行不必要的处理,而且我希望通过分区并行地进行保存。然而,我不知道如何以正确的方式做到这一点

我想将每个ID的主体批量附加到不同的特定表中,该ID将为我提供需要保存在正确表中的信息。为此,我尝试了两种方法:

分区:RepartitionnumPartitions,ID->ForeachPartition 分组:groupBy'ID'。applymyFunction@pandas\u udf GROUPED\u MAP 方法1对我来说不太吸引人,重新分区过程看起来有点不必要,我在文档中看到,即使我将一列设置为分区,它也可能在单个分区中保存该列的许多ID。它只保证与该id相关的所有数据都在分区中,并且不会被分割

方法2强制我从pandas_udf输出数据帧,该数据帧具有相同的输入模式,这是不会发生的,因为我正在将eventhub消息从CSV转换为数据帧,以便将其保存到表中。我可以返回我收到的相同数据帧,但听起来很奇怪


有什么好的方法我没有看到吗?

如果您的Id有不同数量的值类型/国家/地区列,您可以使用partitionBy存储它们,从而将它们保存到不同的表中会更快。
否则,使用id列中的withColumn创建派生列,方法与在表之间划分数据时要使用的逻辑相同。然后,您可以使用该派生列作为分区列,以便更快地加载。

如果我理解正确,使用partitionBy保存到文件中,然后读取文件并保存到表中会更快吗?这是因为polybase吗?我现在想的是,只需将所有消息(无论ID如何)添加到通用增量表中,然后我就可以在foreach循环中单独选择每个ID。我相信这不会创建一堆文件,我将确保每个ID都被单独处理,并且我将能够并行运行,同时将其放入增量表。如果您希望再次从那里获取并将其写入各个表,您可以按ID进行分区。这将使你的表演即兴发挥。这正是我决定要做的!谢谢!