This is an automated email from the ASF dual-hosted git repository.
alamb pushed a commit to branch active_release
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/active_release by this push:
new 4ca0d95 Cherry pick of Support binary data type in build_struct_array
(#705)
4ca0d95 is described below
commit 4ca0d95fa71d9733b20cbcb4bad92d024e680589
Author: Andrew Lamb <[email protected]>
AuthorDate: Mon Aug 23 17:03:59 2021 -0400
Cherry pick of Support binary data type in build_struct_array (#705)
* Support binary data type in `build_struct_array`. (#702)
* Support binary data type in `build_struct_array`.
* Modify test case.
* cargo fmt
Co-authored-by: Andrew Lamb <[email protected]>
* Remove accidentally included test
Co-authored-by: Yuan Zhou <[email protected]>
---
arrow/src/json/reader.rs | 40 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 40 insertions(+)
diff --git a/arrow/src/json/reader.rs b/arrow/src/json/reader.rs
index 0b220eb..2e716eb 100644
--- a/arrow/src/json/reader.rs
+++ b/arrow/src/json/reader.rs
@@ -1224,6 +1224,14 @@ impl Decoder {
})
.collect::<StringArray>(),
) as ArrayRef),
+ DataType::Binary => Ok(Arc::new(
+ rows.iter()
+ .map(|row| {
+ let maybe_value = row.get(field.name());
+ maybe_value.and_then(|value| value.as_str())
+ })
+ .collect::<BinaryArray>(),
+ ) as ArrayRef),
DataType::List(ref list_field) => {
match list_field.data_type() {
DataType::Dictionary(ref key_ty, _) => {
@@ -2964,6 +2972,38 @@ mod tests {
}
#[test]
+ fn test_json_read_binary_structs() {
+ let schema = Schema::new(vec![Field::new("c1", DataType::Binary,
true)]);
+ let decoder = Decoder::new(Arc::new(schema), 1024, None);
+ let batch = decoder
+ .next_batch(
+ &mut vec![
+ Ok(serde_json::json!({
+ "c1": "₁₂₃",
+ })),
+ Ok(serde_json::json!({
+ "c1": "foo",
+ })),
+ ]
+ .into_iter(),
+ )
+ .unwrap()
+ .unwrap();
+ let data = batch.columns().iter().collect::<Vec<_>>();
+
+ let schema = Schema::new(vec![Field::new("c1", DataType::Binary,
true)]);
+ let binary_values = BinaryArray::from(vec!["₁₂₃".as_bytes(),
"foo".as_bytes()]);
+ let expected_batch =
+ RecordBatch::try_new(Arc::new(schema),
vec![Arc::new(binary_values)])
+ .unwrap();
+ let expected_data =
expected_batch.columns().iter().collect::<Vec<_>>();
+
+ assert_eq!(data, expected_data);
+ assert_eq!(batch.num_columns(), 1);
+ assert_eq!(batch.num_rows(), 2);
+ }
+
+ #[test]
fn test_json_iterator() {
let builder =
ReaderBuilder::new().infer_schema(None).with_batch_size(5);
let reader: Reader<File> = builder