>>> a
DataFrame[id: bigint, julian_date: string, user_id: bigint]
>>> b
DataFrame[id: bigint, quan_created_money: decimal(10,0), quan_created_cnt: bigint]
>>> a.join(b, a.id==b.id, 'outer')
DataFrame[id: bigint, julian_date: string, user_id: bigint, id: bigint, quan_created_money: decimal(10,0), quan_created_cnt: bigint]
有两个id: bigint
,我想删除一个,怎么办?
9条答案
按热度按时间niwlg2el1#
在阅读Spark文档时,我发现了一个更简单的解决方案。
自spark版本1.4起,有一个函数
drop(col)
,可用于 Dataframe 上的pysark。您可以通过两种方式使用它
df.drop('age')
个df.drop(df.age)
Pyspark Documentation - Drop
b5lpy0ml2#
添加到@Patrick 's answer,您可以使用以下命令删除多个列
lo8azlld3#
一个简单的方法是使用“
select
“,并意识到您可以获得dataframe
的所有columns
的列表,即df
,其中df.columns
zzoitvuj4#
可以采用两种方式:
1:您只需保留必要的列:
2:这是更优雅的方式。
你应该避免collect()版本,因为它会向master发送完整的数据集,这将需要大量的计算工作!
kg7wmglp5#
您可以显式命名要保留的列,如下所示:
或者,在一个更通用的方法中,你可以通过列表解析包含除特定列之外的所有列,例如(从
b
中排除id
列):最后,对连接结果进行选择:
bz4sfanl6#
也许有点离题,但这里是使用Scala的解决方案。从您的
oldDataFrame
创建一个包含列名的Array
,并删除您要删除的("colExclude")
列。然后将Array[Column]
传递给select
并解包。rsaldnfx7#
是的,可以通过如下切片来删除/选择列:
切片=数据.列[a:B]
data.select切片).show()
示例:
使用select方法获取特性列:
使用drop方法获取最后一列:
xxe27gdn8#
考虑2个 Dataframe :
和
要实现您的目标,有两种方法:
**1.加入条件不同。**不要说aDF.id == bDF.id
写下:
这将自动摆脱额外的下降过程。
**2.使用别名:**您将丢失此中与B特定ID相关的数据。
w1jd8yoj9#
您可以这样删除列:
在您的情况下:
如果要删除多个列,可以执行以下操作: