我有一个Spark数据框架:
> numbers_df
+----+-----------+-----------+-----------+-------------------------------------+
| id | num_1| num_2| num_3| all_num|
+----+-----------+-----------+-----------+-------------------------------------+
| 1| [1, 2, 5]| [4, 7]| [8, 3]| [1, 2, 3, 4, 5, 6, 7, 8, 9]|
| 2| [12, 13]| [10, 20]| [15, 17]| [10, 11, 12, 13, 14, 15, 16, 17, 18]|
+----+-----------+-----------+-----------+-------------------------------------+
我需要从num_1
、num_2
和num_3
列中除去all_num
列的值。
预期结果:
<表类>id num_1 num_2 num_3 all_num except_num tbody><<tr>1 (1、2、5) (4、7) (8, 3) [1, 2, 3, 4, 5, 6, 7, 8, 9) [6, 9] 2(12、13) (10, 16) [15、17] (10、11、12、13、14、15、16、17、18) [11、14、18] 表类>
可以将array_except
和concat
函数组合使用
df = df.withColumn('except_num', F.array_except('all_num', F.concat('num_1', 'num_2', 'num_3')))
df.show(truncate=False)