2016-01-22 73 views
0

我似乎无法在网上找到任何示例。可以用Java,Python或其他语言编写的Cassandra 3.0 supports UDF and UDA用于Cassandra的Python UDF

如何设置在Python中定义的UDF或UDA(我的意思是一个Python函数,而不是通过Python驱动程序在Java或Javascript中的函数)?

+0

在python中编写UDF或UDA的性能将是绝对糟糕的。你应该真的用Java编写它,就像对我来说那样痛苦(我是一个Python家伙)。 –

回答

2

如果你想定义一个UDF,使用类似python驱动程序的UDA,或者你想要一种通用的方式来定义一个用python语言编写的UDF,那么这个问题并不清楚,但这可能会导致你陷入正确的方向。

我在这里的python-driver的test_metadata.py中找到了下面的例子。

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“世界”不是特别熟悉,我会看看。 –