Проблема с воссозданием полей схемы в Solr с DataFrame Spark - PullRequest
0 голосов
/ 26 февраля 2019

Итак, мы используем соединитель 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

...