Repository: modin-project/modin

Issue:
BUG: Concatenation of frames with strings is 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
df1 = pd.DataFrame({"a": ["1", "2", "3"]})
df2 = pd.DataFrame({"a": ["1", "2", "3"]})
df = pd.concat([df1.dropna(), df2.dropna()])
print(df)
```


### Issue Description

The code above fails with error:
```
RuntimeError: Taking the UNION of different text-encoded dictionaries is not yet supported. This may be resolved by using shared dictionaries. For example, by making one a shared dictionary reference to the other.
```

### Expected Behavior

```
   a
0  1
1  2
2  3
0  1
1  2
2  3
```

### 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/dataframe/dataframe.py b/modin/experimental/core/execution/native/implementations/hdk_on_native/dataframe/dataframe.py
--- a/modin/experimental/core/execution/native/implementations/hdk_on_native/dataframe/dataframe.py
+++ b/modin/experimental/core/execution/native/implementations/hdk_on_native/dataframe/dataframe.py
@@ -37,6 +37,7 @@
     get_dtype,
     is_list_like,
     is_bool_dtype,
+    is_string_dtype,
     is_categorical_dtype,
 )
 from modin.error_message import ErrorMessage
@@ -998,6 +999,7 @@ def _union_all(
             len(other_modin_frames) == 0
             or len(self.columns) == 0
             or all(f._has_arrow_table() for f in ([self] + other_modin_frames))
+            or any(is_string_dtype(t) for t in self._dtypes)
             or any(len(f.columns) != len(self.columns) for f in other_modin_frames)
             or any(set(f._dtypes) != set(self._dtypes) for f in other_modin_frames)
         ):


Test patch:
diff --git a/modin/experimental/core/execution/native/implementations/hdk_on_native/test/test_dataframe.py b/modin/experimental/core/execution/native/implementations/hdk_on_native/test/test_dataframe.py
--- a/modin/experimental/core/execution/native/implementations/hdk_on_native/test/test_dataframe.py
+++ b/modin/experimental/core/execution/native/implementations/hdk_on_native/test/test_dataframe.py
@@ -775,6 +775,17 @@ def test_concat_index_names(self):
 
         df_equals(ref, exp)
 
+    def test_concat_str(self):
+        def concat(df1, df2, lib, **kwargs):
+            return lib.concat([df1.dropna(), df2.dropna()]).astype(str)
+
+        run_and_compare(
+            concat,
+            data={"a": ["1", "2", "3"]},
+            data2={"a": ["4", "5", "6"]},
+            force_lazy=False,
+        )
+
 
 class TestGroupby:
     data = {