在Ignary缓存的BinaryObjects上执行SQL

时间:2016-10-13 11:17:24

标签: apache-spark ignite

我正在从一个数据帧中创建一个BinaryObject的缓存,然后我想在那个点火缓存上执行SQL。

以下是我的代码,其中NavComponent是包含三个字段(id,name和age)的数据框:

bank

现在我正在尝试执行这样的SQL查询:

    val ic = new IgniteContext(sc, () => new IgniteConfiguration()) 
    val cacheConfig = new CacheConfiguration[BinaryObject, BinaryObject]()
    cacheConfig.setName("test123")
    cacheConfig.setStoreKeepBinary(true)
    cacheConfig.setIndexedTypes(classOf[BinaryObject], classOf[BinaryObject])

    val qe = new QueryEntity()
    qe.setKeyType(TestKey)
    qe.setValueType(TestValue)
    val fields = new java.util.LinkedHashMap[String, String]()
    fields.put("id", "java.lang.Long")
    fields.put("name", "java.lang.String")
    fields.put("age", "java.lang.Int")
    qe.setFields(fields)
    val qes = new java.util.ArrayList[QueryEntity]()
    qes.add(qe)

    cacheConfig.setQueryEntities(qes)

    val cache = ic.fromCache[BinaryObject, BinaryObject](cacheConfig)

    cache.savePairs(bank.rdd, (row: Bank, iContext: IgniteContext) => {
        val keyBuilder = iContext.ignite().binary().builder("TestKey");
        keyBuilder.setField("id", row.id);
        val key = keyBuilder.build();

        val valueBuilder = iContext.ignite().binary().builder("TestValue");
        valueBuilder.setField("name", row.name);
        valueBuilder.setField("age", row.age);
        val value = valueBuilder.build();
        (key, value);        
    }, true)

以下例外情况失败:

cache.sql("select age from TestValue")

我在这里做错了什么?

1 个答案:

答案 0 :(得分:4)

字段age的类型不正确,应该如下:

fields.put("age", "java.lang.Integer")