如何比较scala中不同的两个数据框和打印列

rom*_*ana 17 compare scala bigdata apache-spark spark-dataframe

我们这里有两个数据框:

预期的数据帧:

+------+---------+--------+----------+-------+--------+
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+---------+--------+----------+-------+--------+
|     3|  Chennai|  rahman|9848022330|  45000|SanRamon|
|     1|Hyderabad|     ram|9848022338|  50000|      SF|
|     2|Hyderabad|   robin|9848022339|  40000|      LA|
|     4|  sanjose|   romin|9848022331|  45123|SanRamon|
+------+---------+--------+----------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

和实际数据框:

+------+---------+--------+----------+-------+--------+
|emp_id| emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+---------+--------+----------+-------+--------+
|     3|  Chennai|  rahman|9848022330|  45000|SanRamon|
|     1|Hyderabad|     ram|9848022338|  50000|      SF|
|     2|Hyderabad|   robin|9848022339|  40000|      LA|
|     4|  sanjose|  romino|9848022331|  45123|SanRamon|
+------+---------+--------+----------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

两个数据帧之间的区别现在是:

+------+--------+--------+----------+-------+--------+
|emp_id|emp_city|emp_name| emp_phone|emp_sal|emp_site|
+------+--------+--------+----------+-------+--------+
|     4| sanjose|  romino|9848022331|  45123|SanRamon|
+------+--------+--------+----------+-------+--------+
Run Code Online (Sandbox Code Playgroud)

我们使用的是except函数df1.except(df2),但问题是,它返回的是不同的整行.我们想要的是查看该行中哪些列是不同的(在这种情况下,"romin"和"emp_name"中的"romino"不同).我们遇到了巨大的困难,任何帮助都会很棒.

him*_*ian 34

从上面问题中描述的场景看,似乎必须在列之间找到差异,而不是在行之间找到差异.

因此,为了做到这一点,我们需要在这里应用选择性差异,这将为我们提供具有不同值的列以及值.

现在,要应用选择性差异,我们必须编写如下代码:

  1. 首先,我们需要在预期和实际数据帧中找到列.

    val columns = df1.schema.fields.map(_.name)

  2. 然后我们必须逐列找到差异.

    val selectiveDifferences = columns.map(col => df1.select(col).except(df2.select(col)))

  3. 最后,我们需要找出哪些列包含不同的值.

    selectiveDifferences.map(diff => {if(diff.count> 0)diff.show})

而且,我们将只获得包含不同值的列.像这样:

+--------+
|emp_name|
+--------+
|  romino|
+--------+
Run Code Online (Sandbox Code Playgroud)

我希望这有帮助!

  • Scala语法令我困惑.任何人都可以在PySpark中解释这个吗? (4认同)