Repository: modin-project/modin

Issue:
BUG: ArrowPeriodType and ArrowIntervalType are not supported by HDK 
### Modin version checks

- [X] I have checked that this issue has not already been reported.

- [X] I have confirmed this bug exists on the latest released version of Modin.

- [X] I have confirmed this bug exists on the main branch of Modin. (In order to do this you can follow [this guide](https://modin.readthedocs.io/en/stable/getting_started/installation.html#installing-from-the-github-master-branch).)


### Reproducible Example

```python
import modin.pandas as pd

df = pd.DataFrame(
    {
        "period": pd.period_range("2023-01", periods=3, freq="M"),
    }
)
print(df.dropna())
df = pd.DataFrame(
    {
        "interval": pandas.interval_range(start=1, end=100, periods=2),
    }
)
print(df.dropna())
```


### Issue Description

The following errors occurs when a data frame contains period and interval dtypes:
```
RuntimeError: extension<pandas.period<ArrowPeriodType>> is not yet supported. id: extension
RuntimeError: extension<pandas.interval<ArrowIntervalType>> is not yet supported. id: extension
```

### Expected Behavior

```
    period
0  2023-01
1  2023-02
2  2023-03
        interval
0    (1.0, 50.5]
1  (50.5, 100.0]
```

### Error Logs

<details>

```python-traceback

Replace this line with the error backtrace (if applicable).

```

</details>


### Installed Versions

<details>

Replace this line with the output of pd.show_versions()

</details>



Discussion:

Resolving patch:
diff --git a/modin/experimental/core/execution/native/implementations/hdk_on_native/partitioning/partition_manager.py b/modin/experimental/core/execution/native/implementations/hdk_on_native/partitioning/partition_manager.py
--- a/modin/experimental/core/execution/native/implementations/hdk_on_native/partitioning/partition_manager.py
+++ b/modin/experimental/core/execution/native/implementations/hdk_on_native/partitioning/partition_manager.py
@@ -240,6 +240,10 @@ def is_supported_dtype(dtype):
                 or pyarrow.types.is_null(dtype)
             ):
                 return True
+            if isinstance(dtype, pyarrow.ExtensionType) or pyarrow.types.is_duration(
+                dtype
+            ):
+                return False
             try:
                 pandas_dtype = dtype.to_pandas_dtype()
                 return pandas_dtype != np.dtype("O")


Test patch:
diff --git a/modin/experimental/core/execution/native/implementations/hdk_on_native/test/utils.py b/modin/experimental/core/execution/native/implementations/hdk_on_native/test/utils.py
--- a/modin/experimental/core/execution/native/implementations/hdk_on_native/test/utils.py
+++ b/modin/experimental/core/execution/native/implementations/hdk_on_native/test/utils.py
@@ -161,13 +161,17 @@ def __init__(self, *dfs):
             df.shape  # to trigger real execution
             if df.empty:
                 continue
-            partition = df._query_compiler._modin_frame._partitions[0][0]
+            modin_frame = df._query_compiler._modin_frame
+            partition = modin_frame._partitions[0][0]
             if partition.frame_id is not None:
                 continue
             frame = partition.get()
             if isinstance(frame, (pandas.DataFrame, pandas.Series)):
-                frame_id = DbWorker().import_pandas_dataframe(frame)
-            elif isinstance(frame, pa.Table):
+                frame = pa.Table.from_pandas(frame)
+            if isinstance(frame, pa.Table):
+                _, cols = modin_frame._partition_mgr_cls._get_unsupported_cols(frame)
+                if len(cols) != 0:
+                    continue
                 frame_id = DbWorker().import_arrow_table(frame)
             else:
                 raise TypeError(
diff --git a/modin/pandas/test/test_io.py b/modin/pandas/test/test_io.py
--- a/modin/pandas/test/test_io.py
+++ b/modin/pandas/test/test_io.py
@@ -1474,10 +1474,6 @@ def test_read_parquet_partitioned_directory(
                 columns=columns,
             )
 
-    @pytest.mark.skipif(
-        StorageFormat.get() == "Hdk",
-        reason="https://github.com/intel-ai/hdk/issues/291",
-    )
     @pytest.mark.xfail(
         condition="config.getoption('--simulate-cloud').lower() != 'off'",
         reason="The reason of tests fail in `cloud` mode is unknown for now - issue #3264",