GitHub user finlaydotb closed a discussion: How may I construct a value of vec 
of vecs for a record batch?

I can create  column of type "UTF8" as follows

```
    let schema = Arc::new(Schema::new(vec![
        Field::new("id", DataType::Int32, false),
        Field::new("payload", DataType::Utf8, false),
    ]));

    let vec_of_strings: Vec<String> = vec!["one".to_string(), 
"two".to_string()];
    
    let batch = RecordBatch::try_new(
        schema,
        vec![
            Arc::new(Int32Array::from_slice([1, 2])),
            Arc::new(StringArray::from(vec_of_strings)),
        ],
    )?;

    ctx.register_batch("demo", batch)?;
```

Executing a query against this, like so

```
    let df = ctx.sql(r#"
       SELECT *
       from demo
    "#).await?;
```

gives the expected results

```
+----+---------+
| id | payload |
+----+---------+
| 1  | one       |
| 2  | two      |
+----+---------+
```

Now I have a usecase where the payload should be an array. So something like 
this

```
+----+---------+
| id | payload |
+----+---------+
| 1  | [piano, guitar, drums]   |
| 2  | [violin, piano]      |
+----+---------+
```

How may I go about this?

changing the `vec_of_strings` to `vec_of_vecs` fails. I mean this 

```
    let vec_of_vecs: Vec<Vec<String>> = vec![
        vec!["piano".to_string(), "guitar".to_string(), "drums".to_string()],
        vec!["violin".to_string(), "guitar".to_string()]
    ];
```

When used to create the batch like this

```
    let batch = RecordBatch::try_new(
        schema,
        vec![
            Arc::new(Int32Array::from_slice([1, 2])),
            Arc::new(StringArray::from(vec_of_vecs)),
        ],
    )?;
```
 Fails to compile with the error
 
 ```
    |
80 |             Arc::new(StringArray::from(vec_of_vecs)),
   |                      ----------------- ^^^^^^^^^^^ the trait 
`From<Vec<Vec<std::string::String>>>` is not implemented for 
`GenericByteArray<GenericStringType<i32>>`
   |                      |
   |                      required by a bound introduced by this call
   |
   = help: the following other types implement trait `From<T>`:
             <GenericByteArray<GenericBinaryType<OffsetSize>> as 
From<GenericByteArray<GenericStringType<OffsetSize>>>>
             <GenericByteArray<GenericBinaryType<OffsetSize>> as 
From<Vec<&[u8]>>>
             <GenericByteArray<GenericBinaryType<OffsetSize>> as 
From<Vec<Option<&[u8]>>>>
             <GenericByteArray<GenericBinaryType<T>> as 
From<GenericListArray<T>>>
             <GenericByteArray<GenericStringType<OffsetSize>> as 
From<GenericByteArray<GenericBinaryType<OffsetSize>>>>
             <GenericByteArray<GenericStringType<OffsetSize>> as 
From<GenericListArray<OffsetSize>>>
             <GenericByteArray<GenericStringType<OffsetSize>> as 
From<Vec<&str>>>
             <GenericByteArray<GenericStringType<OffsetSize>> as 
From<Vec<Option<&str>>>>
           and 3 others
 ```

Any idea on how I may achieve the above?


GitHub link: https://github.com/apache/datafusion/discussions/6398

----
This is an automatically sent email for [email protected].
To unsubscribe, please send an email to: 
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to