from pyspark.sql.functions import col
df1.alias('a').join(df2.alias('b'),col('b.id') == col('a.id')).select([col('a.'+xx) for xx in a.columns] + [col('b.other1'),col('b.other2')])
诀窍在于:
[col('a.'+xx) for xx in a.columns] : all columns in a
[col('b.other1'),col('b.other2')] : some columns of b
from pyspark.sql.functions import col df1.alias('a').join(df2.alias('b'),col('b.id') == col('a.id')).select([col('a.'+xx) for xx in a.columns] + [col('b.other1'),col('b.other2')])
for i in range(len(df.columns)):
if df.columns[i] not in newcols:
newcols.append(df.columns[i])
else:
dupcols.append(i)
df = df.toDF(*[str(i) for i in range(len(df.columns))])
for dupcol in dupcols:
df = df.drop(str(dupcol))
return df.toDF(*newcols)
12条答案
按热度按时间nszi6y051#
星号(
*
)适用于别名。例:wlsrxk512#
我不确定这是不是最有效的方法,但这对我很管用:
诀窍在于:
yvgpqqbh3#
不使用别名。
nwo49xxi4#
这是一个不需要SQL上下文,但维护DataFrame的元数据的解决方案。
然后,
c.show()
产生:kb5ga3dv5#
我相信这将是最简单和最直观的方式:
8wtpewkr6#
删除重复的b_id
shyt4zoc7#
下面是代码片段,它执行内部联接,并从dataframe中选择列,并将同一列的别名设置为不同的列名。
uqjltbpv8#
我收到一个错误:‘A Not Found’,使用建议的代码:
我将
a.columns
更改为df1.columns
,结果成功了。w7t8yxp59#
加入后丢弃重复列的功能。
查看
Def dropDupeDfCols(Df):新数据集=[]数据集=[]
mbjcgjjk10#
我只是删除了df2中不需要的专栏,并加入了:
avwztpqn11#
brccelvz12#
您可以只进行连接,然后选择所需的列https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=dataframe%20join#pyspark.sql.DataFrame.join