我有2个这样的数据框。 df1
+----+-------------+
|colA|colB |
+----+-------------+
| 1| "someval" |
| 2| "someval2"|
| 3| "someval3"|
df2
+----+-------------+
|colA|colC |
+----+-------------+
| 1| "someval" |
| 1| "someval2"|
| 2| "someval3"|
如果我通过colA进行内部连接df1和df2,我会得到这个。
+----+-------------+----------+
|colA|colB |colC |
+----+-------------+----------+
| 1| "someval" |"someval" |
| 1| "someval" |"someval2"|
| 2| "someval2"|"someval3"|
但是我只想要colA的不同行(因此,获取colA的第一行就足够了)
+----+-------------+----------+
|colA|colB |colC |
+----+-------------+----------+
| 1| "someval" |"someval" |
| 2| "someval2"|"someval3"|
答案 0 :(得分:1)
尝试一下。
distinct_df = df2.dropDuplicates(['colA'])
加入数据框
inner_join_df = df1.join(distinct_df, df1.colA == distinct_df.colA)
inner_join_df.show()
我已经使用熊猫加入了数据框:
import pandas as pd
data1 =[[1,'someval'],[2,'someval2'],[3,'someval3']]
data2 =[[1,'someval'],[1,'someval2'],[2,'someval3']]
df1=pd.DataFrame(data1,columns=['colA','colB'])
df2=pd.DataFrame(data2,columns=['colA','colC'])
unique_df=df2.drop_duplicates('colA')
joindf = pd.merge(df1,unique_df,on='colA',how='inner')
print(joindf )
答案 1 :(得分:0)
使用窗口函数对列A的值与使用其他列相同的行进行排序。在第二步中,仅过滤函数结果为1的行
sqlContext.sql("""
select colA,colB,colC from (
SELECT *,row_number() over (PARTITION by colA order by colB,colC) as rn from df_p )x where rn=1 """
).show(60)