2016-01-22 2 views
0

Я, кажется, не могу найти какой-либо пример в Интернете. Cassandra 3.0 supports UDF and UDA, которые могут быть написаны на Java, Python или других.Python UDF для Cassandra

Как настроить UDF или UDA, определенные в Python (я имею в виду функцию Python, а не функцию в Java или Javascript через драйвер Python)?

+0

Выполнение написания UDF или UDA в python будет абсолютно ужасным. Вы действительно должны просто написать его на Java, так же болезненно, как и я, чтобы сказать это (я парень Python). –

ответ

2

Неясно, если вы хотите определить UDF, UDA, используя что-то вроде драйвера python, или вы хотите обобщенный способ определить UDF на языке python, но это может привести вас в порядок правильное направление.

Здесь были найдены следующие примеры в test_metadata.py драйвера python.

https://github.com/datastax/python-driver/blob/master/tests/integration/standard/test_metadata.py#L448

Пример UDF в JavaScript

session.execute("""CREATE FUNCTION {0}.sum_int(key int, val int) 
          RETURNS NULL ON NULL INPUT 
          RETURNS int 
          LANGUAGE javascript AS 'key + val';""".format(keyspace_name)) 

Я полагаю, вы можете переключить язык функция в действительности написана в путем изменения параметра языка выше.

Ниже приведен пример объявления функции в java.

session.execute("""CREATE OR REPLACE FUNCTION update_map(s map<int, int>, i int) 
           RETURNS NULL ON NULL INPUT 
           RETURNS map<int, int> 
           LANGUAGE java AS 's.put(new Integer(i), new Integer(i)); return s;';""") 

Пример UDA

session.execute("""CREATE AGGREGATE {0}.sum_agg(int) 
          SFUNC sum_int 
          STYPE int 
          INITCOND 0""" 
          .format(self.keyspace_name)) 

Существует также сообщение блога находится здесь вы можете ссылаться. http://www.datastax.com/dev/blog/cassandra-user-defined-functions-python-driver

+0

Спасибо. Я уточнил свой вопрос. Есть ли язык python или другой язык, чем 'java' или' javascript'? –

+0

У меня не было возможности попробовать, но теоретически вы должны использовать любой язык JSR223, который будет включать jython. Я не думаю, что python будет работать из коробки с помощью cassandra. Вам, вероятно, придется сделать что-то умное и добавить jython-engine.jar в свой путь класса cassandra. Я основываю все это на этой статье здесь. http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html#jsr-223 Я не тестировал это, поэтому не знаю, будет ли это работать точно. Если функция тривиальная, путь наименьшего сопротивления, вероятно, будет реализован в java/javascript. –

+0

Спасибо за ссылку, я не очень хорошо знаком с Java-миром, я посмотрю. –

Смежные вопросы