首页 > 解决方案 > 如何为 ignite-spark-dataframe 配置缓存?

问题描述

我设法通过此处的示例从 ignite 保存和加载 spark 数据帧:https ://apacheignite-fs.readme.io/docs/ignite-data-frame

通过在 ignite 中创建缓存时遵循代码示例,它会自动具有类似“SQL_PUBLIC_name_of_table_in_spark”的名称。

另一方面,如果我想更改一些缓存配置,我需要在创建 ignite 缓存之前在 xml 或代码中指定相同的缓存名称。因为缓存配置在创建缓存后无法更改。请参阅以下代码。

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <!-- Set a cache name. -->
            <property name="name" value="SQL_PUBLIC_name_of_table_in_spark"/>
            <!-- Set cache mode. -->
            <property name="cacheMode" value="PARTITIONED"/>
        </bean>
    </property>
</bean>

然后其中一个将被“缓存已存在”拒绝结果是我无法通过 xml/code 更改任何缓存配置。

这是预期的吗?在这种情况下如何更改缓存配置?

标签: apache-spark-sqlignite

解决方案


您链接的文档页面包含一个创建 SQL 表的代码段:

CREATE TABLE person ( 
    id LONG,  
    name VARCHAR,  
    city_id LONG,  
    PRIMARY KEY (id, city_id) 
) WITH "backups=1, affinityKey=city_id”;

此 SQL 命令是实际创建缓存的内容。您可以更改此命令以更改将创建的缓存的参数。请参阅CREATE TABLE文档

特别是,提供最大灵活性的参数是WITH template=mytemplate。它允许您从预先存在的模板配置创建缓存。要注册模板,您可以在您cacheConfiguration的名称中指定以星号结尾的模板,例如

<bean class="org.apache.ignite.configuration.IgniteConfiguration">
    <property name="cacheConfiguration">
        <bean class="org.apache.ignite.configuration.CacheConfiguration">
            <property name="name" value="mytemplate*"/>
            <!-- your parameters. -->
        </bean>
    </property>
</bean>

如果表是由 Spark 自动创建的,您还可以在设置中指定WITH参数。CREATE TABLEOPTION_CREATE_TABLE_PARAMETERS


推荐阅读