我有两个数据帧df1
和df2
,我只想要结果中不匹配的列。我尝试使用SQL来做,但是SQL返回的所有列都不是一个。
df1
col1|col2|col3
a b c
1 2 3
df2
col1|col2|col3
a b e
1 2 3
我想要的是它是否可以返回
df3
col3
是否可以在pyspark中做,还是必须通过从两个数据框中选择每一列然后进行比较来进行比较?
答案 0 :(得分:0)
如果您需要做的就是比较两个数据框之间的列名,那么我建议如下。
df3 = ## Create empty pyspark dataframe
for name_1, name_2 in zip(df1.schema.names, df2.schema.names):
if name_1 != name_2:
df3[name_2] = df2.name_2
答案 1 :(得分:0)
您实际上并没有指定要从哪个数据框中显示列。下面的解决方案将向您显示两个数据框在同一行级别上的区别。假设在您的dfs中,之前没有null。
val df11 = df1.withColumn("id", row_number().over(Window.orderBy("col1")))
val df22 = df2.withColumn("id", row_number().over(Window.orderBy("col1")))
val df_join = df11.join(df22.selectExpr("col1 as col11", "col2 as col22", "col3 as col33", "id"), Seq("id"), "inner")
df_join.select(when($"col1" === $"col11", null).otherwise(col("col1")), when($"col2" === $"col22", null).otherwise(col("col2")), when($"col3" === $"col33", null).otherwise(col("col3"))).show