pyspark:使用模式加入?或者将架构转换为列表?

Posted

技术标签:

【中文标题】pyspark:使用模式加入?或者将架构转换为列表?【英文标题】:pyspark: join using schema? Or converting the schema to a list? 【发布时间】:2016-06-27 23:58:22 【问题描述】:

我正在使用下面的代码来连接两个数据框:

new_df = df_1.join(df_2, on=['field_A', 'field_B', 'field_C'], how='left_outer')

上述代码运行良好,但有时df_1df_2 有数百列。是否可以使用模式加入而不是手动添加所有列?或者有没有办法可以将模式转换为列表?非常感谢!

【问题讨论】:

【参考方案1】:

如果您的意思是以某种方式让 join 合并列 dtypes,则您不能加入架构。您可以先提取列名,然后将它们作为on= 的列表参数传递,如下所示:

join_cols = df_1.columns
df_1.join(df_2, on=join_cols, how='left_outer')

现在显然您必须编辑join_cols 的内容,以确保它只有您真正想要加入df_1df_2 的名称。但是如果有数百个有效列,这可能比一一添加要快得多。您还可以让 join_cols 成为 df_1df_2 列的交集,然后在更合适的情况下从那里进行编辑。

编辑:虽然我应该补充一点,Spark 2.0 版本几乎是现在任何一天,我还没有精通所有的变化。所以这可能也值得研究,或提供未来的解决方案。

【讨论】:

以上是关于pyspark:使用模式加入?或者将架构转换为列表?的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark RDD 到具有强制模式的 DataFrame:值错误

将列表转换为 pyspark 数据框

Pyspark 将列表列转换为嵌套结构列

将列表转换为 pyspark 数据框

将 pyspark 数据框转换为 python 字典列表

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