连接后如何在 Pyspark Dataframe 中选择和排序多个列

Posted

技术标签:

【中文标题】连接后如何在 Pyspark Dataframe 中选择和排序多个列【英文标题】:How to select and order multiple columns in a Pyspark Dataframe after a join 【发布时间】:2016-11-07 14:21:38 【问题描述】:

我想从现有数据框(在连接后创建)中选择多个列,并希望将这些文件排序为我的目标表结构。如何做呢 ?我使用的方法如下。在这里,我可以选择需要但无法按顺序制作的必要列。

Required (Target Table structure) :
hist_columns = ("acct_nbr","account_sk_id", "zip_code","primary_state", "eff_start_date" ,"eff_end_date","eff_flag")

account_sk_df = hist_process_df.join(broadcast(df_sk_lkp) ,'acct_nbr','inner' )
account_sk_df_ld = account_sk_df.select([c for c in account_sk_df.columns if c in hist_columns])

>>> account_sk_df
DataFrame[acct_nbr: string, primary_state: string, zip_code: string, eff_start_date: string, eff_end_date: string, eff_flag: string, hash_sk_id: string, account_sk_id: int]


>>> account_sk_df_ld
DataFrame[acct_nbr: string, primary_state: string, zip_code: string, eff_start_date: string, eff_end_date: string, eff_flag: string, account_sk_id: int]

account_sk_id 需要在第二位。最好的方法是什么?

【问题讨论】:

【参考方案1】:

尝试通过仅给出列表来选择列,而不是通过迭代现有列并且排序应该没问题:

account_sk_df_ld = account_sk_df.select(*hist_columns)

【讨论】:

是的.. 这对我有用。你请解释一下发生了什么..这些字段在列表中。 在 spark 中,您可以通过将列名称作为字符串来选择列(但前提是它们在当前数据帧中是唯一的)。 您必须传递像df.select("col1", "col2") 这样的列,而不是df.select(["col1", "col2"])* 有助于将列表解压缩为各个列名称,就像 PySpark 所期望的那样。

以上是关于连接后如何在 Pyspark Dataframe 中选择和排序多个列的主要内容,如果未能解决你的问题,请参考以下文章

Pyspark - 如何将转换后的列与原始 DataFrame 合并?

如何使用 Pyspark 中的 Graphframes 和 Spark Dataframe 中的原始数据获取连接的组件?

如何在pyspark中的数据框之间进行连接

通过列 [PySpark] 连接两个 DataFrame

如何在 PySpark 中为一个组迭代 Dataframe / RDD 的每一行。?

pyspark dataframe数据连接(join)转化为pandas dataframe基于多个字段删除冗余数据