javascript - Apache NiFi 1.3 : How would I approach passing sets of vin #s through the htsa. dot.gov API?

标签 javascript arrays apache-nifi

各位技术人员-- 我正在尝试确定每小时通过 https://vpic.nhtsa.dot.gov/api/ 移动数千个 VIN# 的最佳方法。解析出与每个相关的特征数组。我有两种方法选择,DecodeVINValuesBatch 和 DecodeVIN。批处理版本允许数组,DecodeVIN 是单个引用。在 .NET/C# 或 JBOSS + DBMS 环境中,我知道我会通过首先调用 DecodeVINValuesBatch 来解决该问题,然后在处理过程中捕获 vPIC 集合中的每个值 Id,同时写出数据集。我预计 NiFi 中的集合论不会有任何不同——但我不熟悉这个工具——并且没有遇到任何代表解决通过连续输入流处理多个集合的示例。我对此的想法是,我将从 InvokeHTTP 处理器开始,它捕获 VIN# + 多个其他数据片段,同时将数据的多个部分拆分到不同的处理器中。其中一个处理器需要将 VIN# 与另一个 InvokeHTTP 处理器隔离,以便对 NHTSA 进行外部调用。一方面,在这种情况下,单个 DecodeVIN 似乎是更好的选择。另一方面,我想知道如何最好地管理这些数据。我是否应该考虑丢失的数据、重复的数据等——因此准备好成组处理?我正在寻找生产质量 NiFi 实现的指导和最佳实践。有什么建议吗?

最佳答案

我无法解析您链接到的 API,但以下是执行此类行为的一般模式。

您说得对,InvokeHTTP 处理器是从远程 HTTP 端点检索数据的最佳候选者。生成的流文件内容将包含来自 HTTP 调用的响应,例如,假设该响应采用 JSON 格式。如果我对您对可用 API 方法的描述的理解是正确的,您有两个选择:

  1. DecodeVIN 接受单个 VIN 值并返回特定 VIN 的一些数据集
  2. DecodeVINValuesBatch 接受 VIN 值数组并返回与提供的 VIN 对应的数据集数组

如果您试图实现每小时“数千”个 VIN 的吞吐量,我几乎肯定会推荐第二种选择。它将大大减少网络开销(数量级)并减少分割记录的无关处理。

为了将数据的传入格式转换为该批处理方法可接受的参数,您应该检查 ConvertRecord 处理器以及关联的 RecordReader RecordSetWriter Controller 服务系列。此功能在 Apache NiFi 1.2.0 中引入(并在 1.3.0 中得到增强),并允许独立于其格式转换、查询和丰富任意数据流。 Bryan Bende 写了一篇好文章 introductory guide to using the components ,马克·佩恩 (Mark Payne) 在 record conversion process 上撰写了大量文章。和 realtime querying ,以及 RecordPath Guide是一个综合性的引用资源。

将流文件内容转换为批处理 API 的正确形式后,您可以使用 InvokeHTTP 执行查找操作,并处理将包含 HTTP 响应的传出流文件,或者您可以将新的 LookupRecord 处理器与 LookupService Controller 服务结合使用,其中包括 ScriptedLookupService,它允许您编写任意 Python/Groovy/Ruby 代码来执行查找操作(即用于丰富记录的 HTTP 调用)。

您可能还对 PartitionRecord 感兴趣,它允许根据某些 RecordPath 表达式对“类似”记录进行分组(即过滤不良数据记录、不相关记录等)。最后,为了完整起见,还有您可能感兴趣的 QueryRecordSplitRecordUpdateRecord 处理器。

在 1.2.0 之前,可能需要像 ConvertCSVToJSONSplitText 这样的单独转换处理器,但这种新范例应该很适合您的用例。

关于javascript - Apache NiFi 1.3 : How would I approach passing sets of vin #s through the htsa. dot.gov API?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44791526/

相关文章:

javascript - 使用 Material-UI 中的 slider 动态处理 slider

javascript - Chrome 扩展选项并不总是显示

python - 如何在 for 循环之前用零初始化不同的变量(同时)?

python - 矩阵的xy坐标列表

c - 在 C 中使用大小为 10 的一维数组添加偶数

wcf - 配置来自 Nifi 的 HTTP POST 请求

apache-nifi - 在 NiFi 1.9.2 中提取日期类型数据

javascript - 嵌入视频总是自动播放

javascript - 尝试使用 chrome 控制台 javascript/jquery 获取内部元素

java - 使用 ControllerService 进行 NiFi 处理器 JUnit 测试