【发布时间】:2021-06-04 06:39:45
【问题描述】:
我打算在下面的 PySpark 数据帧上使用 difflib.SequenceMatcher()。
tech.show()
+-----------------------------+----------------------+
| concat_tech |Vendor_product |
+-----------------------------+----------------------+
|AWS Cloud Administration |AWS Cloud Map |
|Grad Portal |CA Identity Portal |
|Html/php |HTML |
|UX Xpect |HP-UX |
|Debian-based |Debian |
|Microsoft Office excel |Microsoft Office |
|Oracle EBusiness Suite 12.2.4|Oracle Primavera Suite|
|Solaris 10.XX |Solaris |
|CA7 Job Scheduler |CA Scheduler |
|Windows NT/XP/Vista |Windows XP |
+-----------------------------+----------------------+
techno.show()
+------------------------------+-------------------------------+--------------------------------+---------------------------------------------------+
|vendor |product |category |sub_category |
+------------------------------+-------------------------------+--------------------------------+---------------------------------------------------+
|Notion Labs, Inc. |Notion |Project Management |Project Management |
|Apptricity Corporation |Apptricity |Enterprise Applications |Enterprise Resource Planning (ERP) |
|Resolution Software, Ltd. |Xcase |IT Governance |Application Development & Management |
|The Apache Software Foundation|Apache Mynewt |IT Governance |Application Development & Management |
|NetApp, Inc. |NetApp iSCSI SAN Storage System|Data Center Solutions |Data Management & Storage (Hardware) |
|HP, Inc. |HP Z820 |Hardware (Basic) |Consumer Electronics, Personal Computers & Software|
|Dell Technologies, Inc. |Dell EMC FormWare |Customer Relationship Management|Help Desk Management |
|ServiceMax, Inc. |ServiceMax |Customer Relationship Management|Service & Field Support Management |
|MaxMind, Inc. |MaxMind GeoIP |Software (Basic) |Server Technologies (Software) |
|Campus Management Corporation |Campus Management |Vertical Markets |Academic & Education Management Software |
+------------------------------+-------------------------------+--------------------------------+---------------------------------------------------+
import pandas as pd
from difflib import SequenceMatcher
def similar(a,b):
if pd.isnull(a) or pd.isnull(b):
return 0
else:
return SequenceMatcher(None, a, b).ratio()
函数 SequenceMatcher(a, b) 将 concat_tech 数据框 tech 中的 'a' 和 product 数据框 techno 作为 'b' 并返回 a 和 b 之间的比率。目标是在所有 product 中找到 concat_tech 的最佳匹配,并返回一个具有最佳匹配的数据框,即一个 product 将从 product 列返回,使用 SequenceMatcher() 为 concat_tech 的值生成最佳(最大)比率。
它应该是一对多的操作,可以在 pandas 中使用列表理解来完成,但是如何在 PySpark 中实现相同的操作?我在两个数据框中都有数百万行,这里我给出了 10 个样本。
【问题讨论】:
标签: python-3.x pandas for-loop pyspark list-comprehension