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. 添加新数据格式

若要添加新的数据格式,请实现 SimpleFeatureConverterFactorySimpleFeatureConverter 接口,并将它们注册到 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