Я ожидал бы иметь только одну запись, но это может быть диапазон.
scan 'mytablename',{FILTER=>org.apache.hadoop.hbase.filter.PrefixFilter.new(org.apache.hadoop.hbase.util.Bytes.toBytes(org.apache.hadoop.hbase.util.MD5Hash.getMD5AsHex(org.apache.hadoop.hbase.util.Bytes.toBytes('somekeyvalueprefix'))))}
Я обнаружил, что мы можем использовать классы hbase в командной строке. Однако я не получил ожидаемого значения.
Самая легкая вещь сделать
Запишите тривиальный CLI для своего Java "функция". (Нет такой вещи, таким образом, я предположу, что Вы на самом деле имеете в виду функцию метода класса Java.)
public class ExposeAMethod {
public static void main( String args[] ) {
TheClassToExpose x = new TheClassToExpose();
x.theFunction();
}
}
Скомпилируйте и создайте исполняемый файл JAR с этим как точка входа. Назовите его ExposeAMethod.jar
Назовите это от команды созданным подпроцессом.
import subprocess
p = subprocess.Popen("java -jar ExposeAMethod.jar", shell=True)
sts = os.waitpid(p.pid, 0)
Это - минимум. И это действительно не очень. Я строки количества 6 Java, 3 строки Python и Вы в порядке.
Если Вы хотите передать аргументы этой функции конструктора класса или метода Java, необходимо будет записать еще несколько строк кода. У Вас есть два варианта.
Считайте аргументы от stdin, запишите результаты на stdout. Это относительно легко и работает действительно хорошо.
Проанализируйте аргументы как параметры командной строки к Java, запишите результаты на stdout. Это немного более твердо, но делает вывод очень приятно. Премия - то, что у Вас теперь есть полезная программа Java командной строки, которую можно снова использовать.
Если Вы не хотите идти запись Ваш собственный маршрут JNI/C.
Другая опция состоит в том, чтобы использовать jpype, который для меня всегда является, что я использую для баз данных Oracle доступа becuase установку оракула c, драйверы на ПК лаваш. Можно сделать материал как (из документов):
from jpype import *
startJVM("d:/tools/j2sdk/jre/bin/client/jvm.dll", "-ea") # or path to your jvm
java.lang.System.out.println("hello world")
shutdownJVM()
Это не было обновлено в некоторое время и нет очень в способе документации, но это действительно работает обоснованно хорошо.
Необходимо будет создать Python C расширение, которое встраивает Java - на основе чего-то как http://www.javaworld.com/javaworld/jw-05-2001/jw-0511-legacy.html, или иначе необходимо будет запустить Java в отдельном подпроцессе.
Я не знаю для Python, но в прошлый раз, когда я должен был назвать Java из приложения C (сервис NT), я должен был загрузиться jvm.dll
. Смотрите на документацию JNI.
Кроме того, Вы всегда называете вызов
os.system("java com.myapp.MyClass")
если Вы не обеспокоены производительностью.