Итак, мы используем соединитель lucidwords spark-solr для передачи большого количества данных в наш облачный кластер Solr с помощью Spark.Мы создаем DataFrame
, как показано ниже -
val dataFrame = toDbTable(activeItemsTable)
.asVersionedHT(Constants.version)
.loadLatestPartitions()
.withColumn("index",monotonically_increasing_id)
.withColumn("id", 'item_id)
.withColumn("upc", 'upc_nbr)
.withColumn("item_id_channel", functions.concat_ws("-", 'item_id, 'tenant, 'catalog))
.withColumn("name_en", 'item_name)
.withColumn("brand", 'brand_name)
.withColumn("channel", functions.concat_ws("-", 'tenant, 'catalog))
.withColumn("marketplace", 'is_hidden)
.select('id, 'upc, 'name_en, 'brand, 'channel, 'marketplace)
Однако, когда мы пытаемся запустить наш скрипт для заполнения данных, происходит сбой со следующей ошибкой:
org.apache.solr.api.ApiBag$ExceptionWithErrObject: error processing commands, errors: [{add-field={name=taxonomy, indexed=true, multiValued=true, docValues=true, stored=true, type=string}, errorMessages=[Field 'taxonomy' already exists.
]}, {add-field={name=item_id_channel, indexed=true, multiValued=false, docValues=true, stored=true, type=string}, errorMessages=[Field 'item_id_channel' already exists.
]}],
at org.apache.solr.handler.SchemaHandler.handleRequestBody(SchemaHandler.java:92)
at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:199)
at org.apache.solr.core.SolrCore.execute(SolrCore.java:2541)
at org.apache.solr.servlet.HttpSolrCall.execute(HttpSolrCall.java:709)
at org.apache.solr.servlet.HttpSolrCall.call(HttpSolrCall.java:515)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:377)
at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:323)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1634)
at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:533)
Похоже,соединитель spark-solr
пытается воссоздать схему, выводя схему из DataFrame
, определенного выше, но поскольку поля уже определены в коллекции Solr (возможно, с другими параметрами), появляется указанная выше ошибка.
Мой вопрос - есть ли способ определить свойства полей схемы при создании самого DataFrame
?Например, для бренда item_id_channel
могу ли я сказать, что я хочу, чтобы его параметр stored
был установлен на false
при его выполнении?
Альтернативно, поскольку схема определена в Solr, есть лиспособ вообще избежать воссоздания схемы?
Версии: Solr: 7.6.0 Spark: 2.2.1 Разъем lucidworks spark-solr: 3.4.0