如何将一个 CSV 文件中的一行与另一个 CSV 文件中的所有行进行比较?

How can I compare the one line in one CSV with all lines in another CSV file?

我有两个 CSV 文件:

  1. Identity(no,name,Age) 有 10 行
  2. Location(Address,no,City) 有 100 行

我需要提取行并使用 Location CSV 文件检查 Identity 中的 no 列。

Identity CSV 文件中获取单行并检查 Identity.noLocation.noLocation CSV 文件中有 100 行。

如果匹配则合并Identity, Location

中的name, Age, Address, City

注意:我需要从 Identity 中获取第一行并将其与 Location CSV 文件中的 100 行进行比较,然后获取第二行并将其与 100 行进行比较。它将在 Identity CSV 文件中继续最多 10 行。

并且整体结果转换为 Json.Then 将结果移至 SQL 服务器。

Apache Nifi 可以吗?

感谢任何帮助。

您可以在 NiFi 中使用 DistributedMapCache 功能执行此操作,该功能实现了 key/value 存储以供查找。该设置需要一个分布式地图缓存,以及两个流程 - 一个用于使用您的地址记录填充缓存,另一个用于通过 no 字段查找地址。

  1. DistributedMapCache 由两个控制器服务定义,DistributedMapCacheServer and a DistributeMapCacheClientService。如果你的数据集很小,你可以直接使用 "localhost" 作为服务器。

  2. 填充缓存需要读取地址文件,拆分记录,提取 no 键,并将 key/value 对放入缓存。大概的流程可能包括 GetFile -> SplitText -> ExtractText -> UpdateAttribute -> PutDistributedMapCache.

  3. 查找您的身份记录实际上与上面的流程非常相似,因为它需要读取身份文件、拆分记录、提取 no 密钥,然后获取地址记录。处理器流程可能包括 GetFile -> SplitText -> ExtractText -> UpdateAttribute -> FetchDistributedMapCache.

您可以使用 AttributesToJSON 或 ExecuteScript 将整个或部分从 CSV 转换为 JSON。