为了简化这个问题,我的短期目标是构建一个简单的模块,它检查来自转换器或读卡器的每个属性,并返回每个属性的空值百分比(与记录总数相比)。
例如:
输入:
属性1
属性2
属性3
属性4
…
…
输出:
属性1
属性1空计数
属性2
属性2空计数
属性3
属性3空计数
…
…
或者类似的…
再一次,为了澄清,我们不知道属性名,也不知道有多少属性。
理想的,我会建造一个定制变压器,它接受未知数量的属性并执行此计算/处理。
然而,自定义转换器要求输入属性是静态的。
从我所做的所有研究中,我都想不出任何方法来实现这一点。
我想到了一个变形金刚,它将所有属性组合成一个属性,然后它们就可以被分离,但似乎什么都不存在。
我愿意接受任何建议,即使在使用FMEServer方面,发布的参数,无论需要什么,除了理想情况下避免使用python之外,因为其他人可以重用此模块,从而避免版本控制问题。
这是我要生成的许多数据质量检查模块中的第一步,因此我的主要目标是找到一种动态接受未知属性集的方法,进行计算,并用一些额外的计算值返回它们的原始状态。
当做,
戴夫
并行处理是对多个进程的工作划分。现代计算机有多个CPU核心,在这些核心上分散工作可以充分利用可用的计算能力。
FME中的并行处理是指FME引擎将其工作划分为多个工作进程。工作区作者决定何时使用并行处理以及应该创建多少个进程。然后操作系统决定如何将资源分配给这些进程。
FME中的并行处理应用于定制变压器。(在2019年以后的FME中,请它现在是找到并行处理选项的唯一地方)。本质上,通过自定义转换器的每一组功能,在单独的过程中进行。当数据退出自定义转换器时,它会重新组合成一个组。
因为自定义转换器被视为处理任务的一个单元,它包含的各个变压器都包含在每个并联过程中。这允许作者在一个设置中设置多个要并行处理的变压器。它还将所需流程的数量降至最低,因此,启动和停止进程的开销更少,来回传递数据。
并行处理的定义是组,请然而,有些变压器是基于特性的,不基于组,因此不适合并行处理。然而,自定义转换器充当基于组的包装器,提供了一种基于特征的变压器并行处理的方法。
FME中的每个并行过程都使用自己的数据组,其中该组由属性定义。首先,必须在自定义转换器定义的导航器窗口中选择并行处理级别:
之后,使用Transformer的参数对话框选择要分组的属性:
这里,用户使用ZoneCategory属性定义组进行并行处理。
以下步骤是如何在自定义转换器上使用并行处理的示例。
1.启动FME Workbench并打开附加的工作区模板:
工作区正在读取一组公园(空间)数据。它使用neighhoodName作为分组参数来计算每个公园(区域计算器和统计计算器)的平均大小。这将创建每个社区的平均公园大小。
然后工作空间将相邻的公园多边形分解在一起,稍微缓冲一下,以确保相邻的公园合并。第二个缓冲区缩小了公园的大小。
这里可以并行处理,其中每个邻域都作为一个单独的过程进行处理。这是因为所有基于组的变压器(统计计算器和分解器)都使用相同的组。
其他变压器是基于特性的,因此分组并不重要。
2.第2条。选择画布上的所有五个变压器(不包括任何检测变压器)。按ctrl+t(或从菜单栏中选择“变压器>创建自定义变压器”)。
当提示时,输入一个简单的名称,如ParkProcessor…
然后单击“确定”关闭对话框并创建自定义转换器。
三。在自定义转换器定义(活动选项卡应标记为ParkProcessor)中,浏览导航器窗口以查找并行处理参数。在变压器参数下。
双击参数,选择“中等”作为处理级别:
单击“确定”,将打开并行处理。
第四章。返回主画布(活动选项卡为主)。单击齿轮按钮打开ParkProcessor Transformer的参数对话框。在group by参数中选择neighhoodName作为并行处理的属性:
现在,跑步时,自定义转换器将为每个邻居创建单独的进程。多个进程将并行运行(中等处理,每个CPU内核一个)。
5.注意到,在工作区和上面的屏幕截图中,已经有了neighhoodName的参数。
回想一下,FME会自动发布自定义转换器中使用的所有属性。这使得变压器可以在多个地方使用,其中(在本例中)“neighhoodName”可能不可用。因此,当创建自定义转换器时,FME会自动生成第一个发布的参数,第二次激活并行处理。
我们两者都需要吗?好,这取决于邻居名称的使用位置。可以删除Group By参数中对它的任何引用,因为整个自定义转换器现在是一个大组。
让我们把这些参考资料整理一下。返回自定义转换器定义。
打开StatisticsCalculator参数对话框,然后取消设置分组依据,取消选择邻居名称。对溶解变压器重复此过程:
检查AreaCalculator和BuffererTransformer中neighhoodName属性的其他用途。没有用,我们可以删除提示输入该属性的用户参数。为此,打开输入端口的参数对话框,取消选中邻居名称:
这告诉FME变压器中不再需要该属性(并行处理除外)。并且可以删除用户参数提示。
6.检查自定义转换器的参数对话框。运行工作区。输出与之前相同,但是,有了并行进程,运行速度可能会快得多。
最后一点有趣的是:虽然基于特征的变压器没有组来并行处理,它们仍然是并行处理的。这是另一种提高性能的方法。
你好,
我使用一个FME服务器2016来运行不同的工作台。为了更新FME服务器2018,我必须升级这些工作台,也一样。在一个工作台中,我使用来自三岛岛的定制变压器分线器。
升级后我有问题,升级工作台的输出小于旧工作台的输出。
旧输出
新输出
尤其是蟒蛇有另一种输出。但是旧的和新的工作台应该有相同的大小。
有人知道蟒蛇的哪些部位发生了变化吗?谢谢,祝你好运
你好,
我想通过追踪路线找到物体。
但有时由于分支的存在,有多条路径,为了不进入无休止的循环,我需要保存已经使用的段的ID。
我找不到在循环中临时保存属性值的解决方案,所以我创建了一个列表(以所有相关ID的形式,逗号分隔)对于使用ID的段的每次迭代,应该删除列表中的ID。
因为这个列表对每个功能都很重要,我需要一个(发布的)参数,这是动态的。我该怎么做?
谢谢,
基奥
我试图用一个查看公共参数的python脚本编写一个自定义转换器。
有很多尝试和错误正在发生,但我认为我正在做它应该现在。
这有助于我开始:
如果公共参数设置为固定值或设置为特征属性值,则转换器工作。但是当有两个自定义转换器的实例时,它会先查看开始的内容。所以第二个变压器使用第一个变压器的固定值。
自定义_transformer_name='multinstancebug'参数_name='codelength'实例_name=fme_macrovalues[自定义_transformer_name+'_workspace_name']mv_codelength=fme_macrovalues[实例_name+''+参数_name]如果mv_codelength[0:6]='@value':codelength=int(feature.performmfunction(mv_codelength))elif mv_codelength[0:6]='@eval':codelength=int(feature.performfunction(mv_codelength))elif mv_codelength!='':codelength=int(mv_codelength)否则:codelength=0logger.logmessagestring('codelength:'+str(codelength),fmeobjects.fme_inform)
这会产生意想不到的结果,我现在看到的唯一解决方法是使用attributeCreator和attributeRemover首先将值写入功能。
请参见我创建的工作台:多实例错误.fmwt
我定义了一个自定义转换器,它输出的属性比我想要的多。我只想输出这两个属性(network_id和lower_network_id):
但是在主工作台中使用它时,它还从原始输入功能输出属性:
我认为这是因为它们自动向前传播所有源属性,但我想避免这种情况,我只想要两栏的单子。我怎样才能做到这一点?
我有一个工作台,它运行许多几何交叉任务和许多源数据集,并将结果写入数据库。我把不同的任务分为自定义变形金刚,而且大多数源数据集只进入一个自定义转换器,不需要在其他任何地方使用。我的问题是,一旦在其中一个定制的转换器中实现了基于组的转换器(主要是功能合并和聚合器)。加载了更多的源数据,一旦交叉点任务开始,工作台就会耗尽内存。
是否可以配置FME工作台,使其仅读取与一个自定义变压器相关的数据,并强制其在为另一个自定义变压器加载更多源数据之前完成?我尝试在一个循环中根据数量x创建多个属性。如果x=3,则创建的属性应为footo_doc、footo_doc2和footo_doc3。
在下面的示例中,我有一个带有循环的工作流程,但是属性创建者不能正确地使用@value(attribute_name)选项。此流中是否缺少某些内容,或者在循环期间无法使用属性值来命名属性?
如何将工作区中发布的参数传递到同一工作区中的自定义转换器中?我认为您可以将一个已发布的参数传递到一个属性中,然后在自定义转换器中使该属性可用,只是想知道是否有一个简单的清洁方法?
你好
当我在ProdFME服务器中打开工作区时,我看到这个丢失的链接自定义转换器错误。但此转换器已存在于SharedResources文件夹中。我试图添加工作区和其他选项,但是无法添加自定义转换器。
我还有上次保存的信息。我们没有升级FME版本。此错误之前和发生此错误时的版本相同。
last_save_build=“FME(R)2015.1.3.2(20160108-build 15575-win32)
请告知。提前谢谢。
标签@高桥,请@标记2安全亚搏在线,请@特伦特保险柜亚搏在线,请@达尼洛·费姆,请@大卫·R
是否有Oracle NMS MP文件的读卡器?这似乎是小世界许可证中的一个选项,但找不到任何构造。是否有人知道或有一个变压器可以安装此文件类型?
https://knowledge.亚搏在线safe.com/articles/780/working-with-ge-smallworld-databases.html
在自定义转换器中,我必须在几个地方使用已发布的参数。参数从主工作区传递。我用记录器检查了一下,发现这个值出现在自定义转换器工作流程的开头,但当继续进行时,它会被清除掉(我不知道是什么原因造成的,亚搏在线据我所知,发布的参数是只读的)。
我有一个自定义变压器回路中的分解器变压器。当我运行工作区时,分解器保留所有特性,直到每一行通过循环。我想要一排通过整个定制回路变压器,一路上,在进入下一行之前。
你好。
我刚构建了一个自定义的基于python的转换器,它使用两个字符串属性值。
其中一个字符串有一些嵌入的引号(“),在提供给python代码之前被剥离了。
我试着用单引号交换引号,但这完全破坏了Python的执行。
在传递输入值之前,是否确实没有自动转义(进入Transformer设置对话框)?
我通过输入\“(反斜杠引号)代替“(引号)”成功地使它工作。但这真是个糟糕的工作。FME本身就应该自动完成这项工作。
干杯。
我用定制变形金刚来组织我的工作空间,其中一些可以在其他工作区中重用。现在我有11个自定义变压器,我和一个5人的团队合作,每个人都可以更新以创建新版本的变压器。我已经按照文档所述安装了它们在这里,请需要一段时间。如何通过命令行或其他方式以静默模式在Windows文件夹中安装所有变压器?