Search code examples
pythonpython-3.xmapr

maprdb find_by_condition in python throws exception - Class com.mapr.db.Condition$Op not found


I am using python binding for maprdb. While all other interfaces are working as expected, I am having difficulty using "find_by_condition" interface.

Here is the sample I tried :-

import maprdb
condition = {"col1": "col_value"}
enter code here
table_conn.find_by_condition(maprdb.Condition(condition))

I get the following error on last line -

    Traceback (most recent call last):
      File "test.py", line 4, in <module>
        kpis = Kpi().find_by_condition(condition={"kpi_name": "memory_percent"})
      File "/mapr/rdchdp1.schneider.com/user/g60683/cmd_ctrl_center/app/ui/mapr_utils.py", line 127, in find_by_condition
        return self.table_conn.find_by_condition(maprdb.Condition(condition), columns)
      File "/mapr/rdchdp1.schneider.com/projects/tools/anaconda/anaconda36/lib/python3.6/site-packages/maprdb/tables.py", line 64, in find_by_condition
        document_stream = self.java_table.find(python_to_java_cast(condition), columns) if columns else self.java_table.find(python_to_java_cast(condition))
      File "/mapr/rdchdp1.schneider.com/projects/tools/anaconda/anaconda36/lib/python3.6/site-packages/maprdb/utils.py", line 66, in python_to_java_cast
        return value._get_java_object()
      File "/mapr/rdchdp1.schneider.com/projects/tools/anaconda/anaconda36/lib/python3.6/site-packages/maprdb/conditions.py", line 165, in _get_java_object
        return self.java_condition
      File "/mapr/rdchdp1.schneider.com/projects/tools/anaconda/anaconda36/lib/python3.6/site-packages/maprdb/conditions.py", line 31, in java_condition
        self._create_condition()
      File "/mapr/rdchdp1.schneider.com/projects/tools/anaconda/anaconda36/lib/python3.6/site-packages/maprdb/utils.py", line 101, in wrapper
        raise MapRDBError(str(e)) from e
    maprdb.utils.MapRDBError: java.lang.RuntimeException: Class com.mapr.db.Condition$Op not found

Seems there is java library error for python_to_java_cast. Searched over but no fruitful results. Need help on this.. Thanks


Solution

  • Try using the maprdb-python-client package which is officially supported by MapR:

    https://pypi.org/project/maprdb-python-client/#description

    https://mapr.com/docs/home/MapR-DB/JSON_DB/GettingStartedPythonOJAI.html

    You can install the package with pip install maprdb-python-client.

    Here's an example of submitting a conditional query:

    from mapr.ojai.ojai_query.QueryOp import QueryOp
    from mapr.ojai.storage.ConnectionFactory import ConnectionFactory
    
    # Create a connection to data access server
    connection_str = 'nodeb:5678?auth=basic;user=mapr;password=mapr;ssl=false;'
    connection = ConnectionFactory.get_connection(connection_str=connection_str)
    
    # Get a store and assign it as a DocumentStore object
    store = connection.get_store('/crm_data')
    
    # Create an OJAI query
    query = {"$where": {"$like": {"phone_number": '%552-2152%'}}}
    
    # options for find request
    options = {'ojai.mapr.query.result-as-document': True}
    
    # fetch OJAI Documents by query
    query_result = store.find(query, options=options)
    
    # Print OJAI Documents from document stream
    for doc in query_result: print(doc.as_dictionary())
    
    # close the OJAI connection
    connection.close()
    

    For more info about the conditional query operators, see:

    https://mapr.com/docs/61/MapR-DB/JSON_DB/OJAIQueryConditionOperators.html#QueryingJSONDocumentFields__section_rdp_sjd_kdb

    Here's another reference for getting started with maprdb:

    https://github.com/mapr-demos/mapr-db-60-getting-started