在 PySpark 中加入 270 列

Posted

技术标签:

【中文标题】在 PySpark 中加入 270 列【英文标题】:Join 270 columns in PySpark 【发布时间】:2019-10-03 11:34:10 【问题描述】:

我在加入大量列时遇到了问题。

我有 270 个具有相同数据架构的数据输出。而且270个输出需要join到一个大表中,有什么方法可以优化join吗?现在要花很多时间。

目前,我们使用A.join(B,'userid')。谢谢你。 Table like this

【问题讨论】:

架构是这样的:userid: int, type_X_count: int。每个数据输出的行数相同。 'type_X_count' 中的 'X' 在每个数据输出中都不同。 【参考方案1】:

您可以使用unionAll。

from functools import reduce
from pyspark.sql import DataFrame

dfs = [df1,df2,df3]
df = reduce(DataFrame.unionAll, dfs)

如果更适合您的目的,您可以使用unionByName。请阅读文档并验证。

注意:数据框中列的顺序应该相同才能正常工作。如果您没有正确的列顺序,这可能会默默地给出意想不到的结果!!

【讨论】:

嗨,Pissall,谢谢你的建议。我们当前的目标也是获得一个包含 271 列的主表,例如 userid、type_1_count、type_2_count、...、type_270_count,一个扁平表。有没有办法建一个这样的表? 我认为您可能会在这种方法中遇到名称歧义问题。但除此之外,您将不得不使用 for 循环 它不会有名称歧义的问题,因为每个类型的列名称都与其他的不同。实际上,我没有使用连接,而是先合并所有数据框,然后使用数据透视函数,它变成了一个有 271 列的表。完成包括写入镶木地板文件的时间不到 20 分钟。它比以前更容易接受。

以上是关于在 PySpark 中加入 270 列的主要内容,如果未能解决你的问题,请参考以下文章

为啥在 pyspark 中加入两个临时视图后删除列不起作用,但它适用于数据框连接?

带有点“。”的数据框的 pyspark 访问列

在pyspark中加入具有相同列名的数据框

如何在 pyspark 中加入带有熊猫数据框的配置单元表?

将列表转换为数据框,然后在 pyspark 中加入不同的数据框

在pyspark中加入2个表,多个条件,左连接?