如何使用在 DataFrame 中出现两次的列名进行 SELECT?

Posted

技术标签:

【中文标题】如何使用在 DataFrame 中出现两次的列名进行 SELECT?【英文标题】:How to do SELECT with column name that appears twice in DataFrame? 【发布时间】:2016-03-24 17:38:59 【问题描述】:

我有以下代码..

DataFrame addressDF = sqlContext.read().parquet(addressParquetPath);
DataFrame propertyDF = sqlContext.read().parquet(propertyParquetPath);

DataFrame joinedFrame = addressDF.join(propertyDF, propertyDF.col("LOCID").equalTo(addressDF.col("locid")), "left");

joinedFrame.registerTempTable("joinedFrame");
DataFrame joinedFrameSelect = sqlContext.sql("SELECT LOCID,AddressID FROM joinedFrame");

在 Select LocID 中列出了两次,我如何选择 Address 的 LocId 而不是属性。

我可以按列索引对数据框执行选择吗?

【问题讨论】:

您应该考虑使用 DataFrame API 进行选择,例如joinedFrame.select("LOCID", "AddressID"). 【参考方案1】:

我通常会重命名该列——您可以尝试:

...join(propertyDF.withColumnRenamed("LocID", "LocID_R"), ...

或者,如果您想一次性更改 DataFrame 的所有列名 - 例如为每个名称添加一个 _R 以表示“正确” - 您可以试试这个:

df.toDF(df.columns.map(_ + "_R"):_*)

这在您将 DataFrame 重新加入到自身时很有用。

【讨论】:

以上是关于如何使用在 DataFrame 中出现两次的列名进行 SELECT?的主要内容,如果未能解决你的问题,请参考以下文章

数组中求出现两次的元素

在字符串中查找“一个出现两次的字母”

剑指offer 40.知识迁移能力 数组中只出现一次的数字

LeetCode 2351. 第一个出现两次的字母

LeetCode 2351. 第一个出现两次的字母

如何使用小部件在 Dataframe 选择语句中传递动态列名