Add python binding for ZOrderCoveringIndexConfig (#519)
This commit is contained in:
Родитель
1adddf6d54
Коммит
db4bef41b1
|
@ -1,6 +1,6 @@
|
||||||
from .hyperspace import Hyperspace
|
from .hyperspace import Hyperspace
|
||||||
from .indexconfig import CoveringIndexConfig, IndexConfig
|
from .indexconfig import CoveringIndexConfig, ZOrderCoveringIndexConfig, IndexConfig
|
||||||
|
|
||||||
__all__ = [
|
__all__ = [
|
||||||
'Hyperspace', 'CoveringIndexConfig', 'IndexConfig'
|
'Hyperspace', 'CoveringIndexConfig', 'ZOrderCoveringIndexConfig', 'IndexConfig'
|
||||||
]
|
]
|
||||||
|
|
|
@ -21,9 +21,9 @@ class Hyperspace:
|
||||||
|
|
||||||
def _getJavaCoveringIndexConfig(self, index_config):
|
def _getJavaCoveringIndexConfig(self, index_config):
|
||||||
"""
|
"""
|
||||||
Constructs CoveringIndexConfig Java object from python wrapper CoveringIndexConfig object.
|
Constructs CoveringIndexConfig Java object from python wrapper object.
|
||||||
:param index_config: CoveringIndexConfig java object
|
:param index_config: CoveringIndexConfig python object
|
||||||
:return: CoveringIndexConfig python object
|
:return: CoveringIndexConfig java object
|
||||||
|
|
||||||
>>> _getJavaCoveringIndexConfig(idx_config)
|
>>> _getJavaCoveringIndexConfig(idx_config)
|
||||||
"""
|
"""
|
||||||
|
@ -33,6 +33,21 @@ class Hyperspace:
|
||||||
self.jvm.java.lang.String(index_config.indexName), indexed_columns, included_columns)
|
self.jvm.java.lang.String(index_config.indexName), indexed_columns, included_columns)
|
||||||
return _jindexConfig
|
return _jindexConfig
|
||||||
|
|
||||||
|
def _getJavaZOrderCoveringIndexConfig(self, index_config):
|
||||||
|
"""
|
||||||
|
Constructs ZOrderCoveringIndexConfig Java object from python wrapper object.
|
||||||
|
:param index_config: ZOrderCoveringIndexConfig python object
|
||||||
|
:return: ZOrderCoveringIndexConfig java object
|
||||||
|
|
||||||
|
>>> _getJavaZOrderCoveringIndexConfig(idx_config)
|
||||||
|
"""
|
||||||
|
indexed_columns = self._getScalaSeqFromList(index_config.indexedColumns)
|
||||||
|
included_columns = self._getScalaSeqFromList(index_config.includedColumns)
|
||||||
|
index_name = self.jvm.java.lang.String(index_config.indexName)
|
||||||
|
_jZOrderIndexConfig = self.jvm.com.microsoft.hyperspace.index.zordercovering. \
|
||||||
|
ZOrderCoveringIndexConfig(index_name, indexed_columns, included_columns)
|
||||||
|
return _jZOrderIndexConfig
|
||||||
|
|
||||||
def _getScalaSeqFromList(self, list):
|
def _getScalaSeqFromList(self, list):
|
||||||
"""
|
"""
|
||||||
Constructs scala sequence from Java's List object.
|
Constructs scala sequence from Java's List object.
|
||||||
|
@ -71,7 +86,14 @@ class Hyperspace:
|
||||||
>>> df = spark.read.parquet("./sample.parquet").toDF("c1", "c2", "c3")
|
>>> df = spark.read.parquet("./sample.parquet").toDF("c1", "c2", "c3")
|
||||||
>>> hyperspace.createIndex(df, indexConfig)
|
>>> hyperspace.createIndex(df, indexConfig)
|
||||||
"""
|
"""
|
||||||
self.hyperspace.createIndex(dataFrame._jdf, self._getJavaCoveringIndexConfig(indexConfig))
|
if isinstance(indexConfig, CoveringIndexConfig):
|
||||||
|
self.hyperspace.createIndex(dataFrame._jdf, \
|
||||||
|
self._getJavaCoveringIndexConfig(indexConfig))
|
||||||
|
elif isinstance(indexConfig, ZOrderCoveringIndexConfig):
|
||||||
|
self.hyperspace.createIndex(dataFrame._jdf, \
|
||||||
|
self._getJavaZOrderCoveringIndexConfig(indexConfig))
|
||||||
|
else:
|
||||||
|
raise Exception("Invalid index config type: " + type(indexConfig).__name__)
|
||||||
|
|
||||||
def deleteIndex(self, indexName):
|
def deleteIndex(self, indexName):
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -13,4 +13,19 @@ class CoveringIndexConfig:
|
||||||
self.indexedColumns = indexedColumns
|
self.indexedColumns = indexedColumns
|
||||||
self.includedColumns = includedColumns
|
self.includedColumns = includedColumns
|
||||||
|
|
||||||
|
class ZOrderCoveringIndexConfig:
|
||||||
|
def __init__(self, indexName, indexedColumns, includedColumns):
|
||||||
|
"""
|
||||||
|
Initializes ZOrderCoveringIndexConfig object.
|
||||||
|
:param indexName: index name
|
||||||
|
:param indexedColumns: indexed columns
|
||||||
|
:param includedColumns: included columns
|
||||||
|
:return: ZOrderCoveringIndexConfig object
|
||||||
|
|
||||||
|
>>> idxConfig = ZOrderCoveringIndexConfig("indexName", ["c1"], ["c2","c3"])
|
||||||
|
"""
|
||||||
|
self.indexName = indexName
|
||||||
|
self.indexedColumns = indexedColumns
|
||||||
|
self.includedColumns = includedColumns
|
||||||
|
|
||||||
IndexConfig = CoveringIndexConfig
|
IndexConfig = CoveringIndexConfig
|
||||||
|
|
|
@ -34,6 +34,13 @@ class HyperspaceIndexManagementTests(HyperspaceTestCase):
|
||||||
self.hyperspace.createIndex(self.df, idx_config)
|
self.hyperspace.createIndex(self.df, idx_config)
|
||||||
self.assertEqual(self.hyperspace.indexes().filter("""name = "idx1" """).count(), 1)
|
self.assertEqual(self.hyperspace.indexes().filter("""name = "idx1" """).count(), 1)
|
||||||
|
|
||||||
|
def test_index_create_zorder(self):
|
||||||
|
idx_config = ZOrderCoveringIndexConfig('zidx1', ['name'], ['age'])
|
||||||
|
self.hyperspace.createIndex(self.df, idx_config)
|
||||||
|
self.assertEqual(self.hyperspace.indexes().filter("""name = "zidx1" """).count(), 1)
|
||||||
|
self.assertEqual(self.hyperspace.index("zidx1"). \
|
||||||
|
filter("""kind = "ZOrderCoveringIndex" """).count(), 1)
|
||||||
|
|
||||||
def test_index_delete(self):
|
def test_index_delete(self):
|
||||||
idx_config = IndexConfig('idx2', ['name'], ['age'])
|
idx_config = IndexConfig('idx2', ['name'], ['age'])
|
||||||
self.hyperspace.createIndex(self.df, idx_config)
|
self.hyperspace.createIndex(self.df, idx_config)
|
||||||
|
|
Загрузка…
Ссылка в новой задаче