9.19. 扩展转换器库¶
有两种方法可以扩展转换器库-添加新的转换函数和添加新的数据格式。
9.19.1. 添加脚本函数¶
扩展功能的最简单方法是定义定制的Java脚本函数。看见 使用脚本语言定义的函数 了解更多详细信息。
9.19.2. 添加新的变换函数¶
若要添加新的转换函数,请创建 TransformationFunctionFactory
并将其注册到 META-INF/services/org.locationtech.geomesa.convert2.transforms.TransformerFunctionFactory
。例如,下面介绍如何添加一个新的转换函数来计算SHA-256散列。
import org.locationtech.geomesa.convert2.transforms.TransformerFunctionFactory
import org.locationtech.geomesa.convert2.transforms.TransformerFunction
class SHAFunctionFactory extends TransformerFunctionFactory {
override def functions = Seq(sha256fn)
val sha256fn = TransformerFunction("sha256") { args =>
Hashing.sha256().hashBytes(args(0).asInstanceOf[Array[Byte]])
}
}
这个 sha256
然后可以在如下所示的字段中使用函数。
fields: [
{ name = "hash", transform = "sha256(stringToBytes($0))" }
]
9.19.3. 添加新数据格式¶
若要添加新的数据格式,请实现 SimpleFeatureConverterFactory
和 SimpleFeatureConverter
接口,并将它们注册到 META-INF/services
恰如其分。看见 org.locationtech.geomesa.convert.text.DelimitedTextConverter
举个例子。
9.19.4. 向Geomesa类路径添加函数¶
使用转换函数和工厂创建JAR文件后,可以将它们添加到 GEOMESA_EXTRA_CLASSPATHS
环境变量,以便将它们暴露给命令行工具和分布式(映射减少)摄取作业。
在类路径上使用转换进行摄取的示例如下:
GEOMESA_EXTRA_CLASSPATHS="/tmp/custom-transformer-1.0.0.jar" bin/geomesa-accumulo ingest -u <user-name>
-p <password> -s <sft-name> -C <converter-name> -c geomesa.catalog hdfs://localhost:9000/data/example.csv
您还可以使用以下工具验证是否正确配置了类路径:
GEOMESA_EXTRA_CLASSPATHS="/tmp/custom-transformer-1.0.0.jar" bin/geomesa-accumulo classpath