我似乎无法在网上找到任何示例。可以用Java,Python或其他语言编写的Cassandra 3.0 supports UDF and UDA。用于Cassandra的Python UDF
如何设置在Python中定义的UDF或UDA(我的意思是一个Python函数,而不是通过Python驱动程序在Java或Javascript中的函数)?
我似乎无法在网上找到任何示例。可以用Java,Python或其他语言编写的Cassandra 3.0 supports UDF and UDA。用于Cassandra的Python UDF
如何设置在Python中定义的UDF或UDA(我的意思是一个Python函数,而不是通过Python驱动程序在Java或Javascript中的函数)?
如果你想定义一个UDF,使用类似python驱动程序的UDA,或者你想要一种通用的方式来定义一个用python语言编写的UDF,那么这个问题并不清楚,但这可能会导致你陷入正确的方向。
我在这里的python-driver的test_metadata.py中找到了下面的例子。
例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
谢谢。我澄清了我的问题。是否有'语言python'或其他语言不是'java'或'javascript'? –
我还没有机会尝试它,但理论上讲,您应该能够使用任何JSR223语言,其中将包括jython。我不认为python可以和cassandra一起使用。你可能不得不做一些聪明的事情,并将jython-engine.jar添加到你的cassandra类路径中。我将这篇文章的全部内容放在这里。 http://www.jython.org/jythonbook/en/1.0/JythonAndJavaIntegration.html#jsr-223 我还没有测试过这个,所以我不知道它是否会工作。如果函数微不足道,阻力最小的路径可能会在java/javascript中实现。 –
感谢您的参考,我对Java“世界”不是特别熟悉,我会看看。 –
在python中编写UDF或UDA的性能将是绝对糟糕的。你应该真的用Java编写它,就像对我来说那样痛苦(我是一个Python家伙)。 –