如何从Spark中的两个数据帧获取不匹配的列

时间:2018-08-19 19:42:54

标签: python apache-spark pyspark

我有两个数据帧df1df2,我只想要结果中不匹配的列。我尝试使用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中做,还是必须通过从两个数据框中选择每一列然后进行比较来进行比较?

2 个答案:

答案 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