Есть ли в Phoenix-Spark API метод checkAndPut, такой как HBase API?

Я использую Spark 1.3, HBase 1.1 и Phoenix 4.4. У меня есть это в моем коде:

val dataframe = sqlContext.createDataFrame(rdd, schema)
dataframe.save("org.apache.phoenix.spark", SaveMode.Overwrite,
    Map("table" -> "TEST_SCHEMA.TEST_HTABLE", "zkUrl" -> zkQuorum))

CREATED_DATE всегда устанавливается в DateTime.now() в кадре данных.

Я не хочу, чтобы поле обновлялось, если строка уже существует в HBase, но есть обновление в других полях.

Я могу добиться этого, используя checkAndPut HBase: поместите все поля и используйте checkAndPut в поле created_date.

Но как мне это сделать с помощью Phoenix-Spark API? Должен ли я вместо этого использовать HBase API?


person sophie    schedule 09.07.2015    source источник
comment
Если у вас есть вопросы продвинутого уровня относительно интеграции Phoenix Spark, я бы посоветовал вам присоединиться к списку рассылки Phoenix. Есть гораздо больше людей, которые могут ответить на подобные вопросы.   -  person Anil Gupta    schedule 10.07.2015
comment
Когда я попытался опубликовать свой вопрос там, он открыл мою почту (To:[email protected]), и я получил ответное письмо от Apache Mailer-daemon -fail.   -  person sophie    schedule 11.07.2015
comment
вы подписались на рассылку? Вам нужно будет подписаться на него, прежде чем отправлять ему электронное письмо.   -  person Anil Gupta    schedule 12.07.2015


Ответы (1)


Approach1: В этом случае следует проверить, существует ли строка. Если строка существует, удалите столбец CREATED_DATE из вашего фрейма данных.
Approach2: Если вы не можете удалить столбец CREATED_DATE из фрейма данных, вам нужно будет написать сопроцессор prePut, который будет запускаться перед выполнением каких-либо операций размещения на сервере региона. Этот подход будет немного сложнее. Итак, я бы предложил 1-й подход.

person Anil Gupta    schedule 10.07.2015
comment
Я не могу сделать первый подход, так как я применяю только одну схему к кадру данных перед сохранением - person sophie; 10.07.2015
comment
@sophie: если вы считаете, что мой ответ ответил на ваш вопрос, подтвердите, приняв ответ. - person Anil Gupta; 10.07.2015
comment
Привет, Анил, я не знаю, как работают сопроцессоры. Но я могу добиться этого, используя checkAndPut HBase. Я просто не знаю, как это реализовать с помощью Phoenix-Spark API. - person sophie; 11.07.2015