在 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 中加入两个临时视图后删除列不起作用,但它适用于数据框连接?