使用AVRO进行字段的数据转换

时间:2017-02-09 05:59:39

标签: avro spark-avro avro-tools avro4s

我是AVRO的新手。我们已经开始使用AVRO模式来读取数据。

现在我们有一个用例,我需要在阅读时截断数据。

假设我的avro schcema是这样的

{
    "name": "table",
    "namepsace": "csd",
    "type": "record",
    "fields": [
        {"name": "CustId", "type":"string"},
        {"name": "ProductId", "type":"string"},
        {"time": "time", "type":"long"}
     ]
}

现在数据就是这样。

{
    "CustId" : "abc1234"
    "ProductID" : "ABC1234567"
    "time" : 123456789
}

当我读取数据时,我想截断字段ProductID。 在上面的示例中,当我读取ProductID,即ABC1234567时,我想将其截断为5个字符ABC12

我可以在架构中指定哪些东西来截断它吗?

1 个答案:

答案 0 :(得分:0)

这是一个可能的开始。 SpecificDatumReader包含以下转换逻辑。这取决于您生成的类来覆盖转换方法。 Schema编译器需要有钩子来注入转换对象。我一直在找钩子。

class FormController {

    public function genForm(Application $app, Request $request){

        $form = $app['form.factory']->createBuilder(FormType::class)
            ->setAction($app['url_generator']->generate('your-route-name'));