Skip to content

Commit 7f6a1d4

Browse files
authored
Don't import duckdb and ray if not used (#33)
1 parent 03400e7 commit 7f6a1d4

File tree

2 files changed

+18
-11
lines changed

2 files changed

+18
-11
lines changed

pypaimon/api/table_read.py

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,14 @@
1818

1919
import pandas as pd
2020
import pyarrow as pa
21-
import ray
2221

2322
from abc import ABC, abstractmethod
24-
from duckdb.duckdb import DuckDBPyConnection
2523
from pypaimon.api import Split
26-
from typing import List, Optional
24+
from typing import List, Optional, TYPE_CHECKING
25+
26+
if TYPE_CHECKING:
27+
import ray
28+
from duckdb.duckdb import DuckDBPyConnection
2729

2830

2931
class TableRead(ABC):
@@ -46,9 +48,9 @@ def to_duckdb(
4648
self,
4749
splits: List[Split],
4850
table_name: str,
49-
connection: Optional[DuckDBPyConnection] = None) -> DuckDBPyConnection:
51+
connection: Optional["DuckDBPyConnection"] = None) -> "DuckDBPyConnection":
5052
"""Convert splits into an in-memory DuckDB table which can be queried."""
5153

5254
@abstractmethod
53-
def to_ray(self, splits: List[Split]) -> ray.data.dataset.Dataset:
55+
def to_ray(self, splits: List[Split]) -> "ray.data.dataset.Dataset":
5456
"""Convert splits into a Ray dataset format."""

pypaimon/py4j/java_implementation.py

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,19 +18,20 @@
1818

1919
# pypaimon.api implementation based on Java code & py4j lib
2020

21-
import duckdb
2221
import pandas as pd
2322
import pyarrow as pa
24-
import ray
2523

26-
from duckdb.duckdb import DuckDBPyConnection
2724
from pypaimon.py4j.java_gateway import get_gateway
2825
from pypaimon.py4j.util import java_utils, constants
2926
from pypaimon.api import \
3027
(catalog, table, read_builder, table_scan, split,
3128
table_read, write_builder, table_write, commit_message,
3229
table_commit, Schema, predicate)
33-
from typing import List, Iterator, Optional, Any
30+
from typing import List, Iterator, Optional, Any, TYPE_CHECKING
31+
32+
if TYPE_CHECKING:
33+
import ray
34+
from duckdb.duckdb import DuckDBPyConnection
3435

3536

3637
class Catalog(catalog.Catalog):
@@ -171,12 +172,16 @@ def to_duckdb(
171172
self,
172173
splits: List[Split],
173174
table_name: str,
174-
connection: Optional[DuckDBPyConnection] = None) -> DuckDBPyConnection:
175+
connection: Optional["DuckDBPyConnection"] = None) -> "DuckDBPyConnection":
176+
import duckdb
177+
175178
con = connection or duckdb.connect(database=":memory:")
176179
con.register(table_name, self.to_arrow(splits))
177180
return con
178181

179-
def to_ray(self, splits: List[Split]) -> ray.data.dataset.Dataset:
182+
def to_ray(self, splits: List[Split]) -> "ray.data.dataset.Dataset":
183+
import ray
184+
180185
return ray.data.from_arrow(self.to_arrow(splits))
181186

182187
def _init(self):

0 commit comments

Comments
 (0)