У меня очень большой фрейм данных в pyspark. В нем более 10 миллионов строк и более 30 столбцов.
Каков наилучший и эффективный способ поиска во всем фрейме данных указанного списка значений и удаления строки, содержащей это значение?
The given list of values:
list=['1097192','10727550','1098754']
The dataframe(df) is :
+---------+--------------+---------------+---------+------------+
| id | first_name | last_name | Salary | Verifycode |
+---------+--------------+---------------+---------+------------+
| 1986 | Rollie | Lewin | 1097192 | 42254172 | -Remove Row
| 289743 | Karil | Sudron | 2785190 | 3703538 |
| 3864 | Massimiliano | Dallicott | 1194553 | 23292573 |
| 49074 | Gerry | Grinnov | 1506584 | 62291161 |
| 5087654 | Nat | Leatherborrow | 1781870 | 55183252 |
| 689 | Thaine | Tipple | 2150105 | 40583249 |
| 7907 | Myrlene | Croley | 2883250 | 70380540 |
| 887 | Nada | Redier | 2676139 | 10727550 | -Remove Row
| 96533 | Sonny | Bosden | 1050067 | 13110714 |
| 1098754 | Dennie | McGahy | 1804487 | 927935 | -Remove Row
+---------+--------------+---------------+---------+------------+
Если бы это был небольшой фрейм данных, я мог бы использовать функции collect () или toLocalIterator (), а затем перебирать строки и удалять его на основе значений списка.
Поскольку это очень большой фрейм данных, лучший способ решить эту проблему?
Я уже придумал это решение, но есть ли лучший способ:
column_names = df.schema.names
for name in column_names:
df = df.filter(~col(name).isin(list))