比较两个数据帧可获得重复次数

时间:2019-03-14 15:40:14

标签: scala apache-spark-sql

我有一个带有列名称的数据框:

DF1:
+------------+
|   colsNames|
+------------+
|col1        |
|col2        |
|col3        |
+------------+

还有一个带有值数组的数据框:

DF2:
+------------+
|         set|
+------------+
|[11, 20]    |
|[1]         |
|[10, 17, 54]|
+------------+

最后,通常,另一个数据框的数组比带数字的DF2大:

DF3:
+--------------------+
|             origin |
+--------------------+
|[11, 17, 1, 2, 3]   |
|[1, 17, 54, 66, 1]  |
|[11, 20, 10, 20]    |
+--------------------+

将DF2的每一行与DF3中列原始的所有值进行比较,并创建一个列,其中所有元素之间的总匹配项相同。结果将是这样的:

resultDF:
+--------------------+------------+------------+------------+
|             origin |        col1|        col2|        col3|
+--------------------+------------+------------+------------+
|[11, 17, 1, 2, 3]   |           1|           1|           1|
|[1, 17, 54, 66, 1]  |           0|           2|           2| 
|[11, 20, 10, 20]    |           3|           0|           1|
+--------------------+------------+------------+------------+

此resultDF第一行的说明(其余相同):

  • 将[11,20]与[11,17,1、2,3]与结果1(仅出现一次11)进行比较
  • 将[11,20]与[1、17、54、66、1]进行比较,结果为0
  • 将[11,20]与[11,20,10,20]进行比较,结果为3(两次出现在数字20上,而一次出现在数字11上)。
  • 按照行顺序,我们在列中添加了带有DF1值的列以及先前的结果。 DF1和DF2具有相同的行号。

0 个答案:

没有答案