This is an automated email from the ASF dual-hosted git repository.

Jefffrey pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/main by this push:
     new b963ecf647 chore: formalize the default map field names to match 
default arrow spec (#10297)
b963ecf647 is described below

commit b963ecf64745367274a4903f73a49b52958e412d
Author: Raz Luvaton <[email protected]>
AuthorDate: Sat Jul 11 03:24:59 2026 +0300

    chore: formalize the default map field names to match default arrow spec 
(#10297)
    
    # Which issue does this PR close?
    
    N/A
    
    # Rationale for this change
    
    In some places we write `keys` and `values` and in some cases `key` and
    `value` (without the `s`)
    
    so matching the names to match the default arrow spec names
    
    this is also important as this is a source of common pitfalls when
    comparing data types from schema and actual data (where actual data
    might coming from another arrow impl like java which uses `key` and
    `value` and not `keys` and `values` -
    
https://github.com/apache/arrow-java/blob/a9f0086090e649b83c89ea864c82ed7fcc84ab2f/vector/src/main/java/org/apache/arrow/vector/complex/MapVector.java#L47-L49)
    
    This is similar to what was done for list:
    - #6785
    
    # What changes are included in this PR?
    add constants for entries, key and value field name in `Field`, replace
    **manually** every place, left out places that test different names
    specifically or made it more explicit
    
    I did it manually since I don't trust LLM that will do it correctly and
    might change tests that check that case specifically and did not want to
    use a script to change that
    
    # Are these changes tested?
    Existing tests
    
    # Are there any user-facing changes?
    the default `MapFieldNames` is `key` and not `keys`, `value` and not
    `values`
---
 arrow-array/src/array/map_array.rs              |  94 +++++++++++----
 arrow-array/src/array/mod.rs                    |   6 +-
 arrow-array/src/builder/map_builder.rs          |  46 +++++--
 arrow-avro/benches/avro_writer.rs               |  14 ++-
 arrow-avro/src/codec.rs                         |   6 +-
 arrow-avro/src/reader/mod.rs                    |  68 ++++++-----
 arrow-avro/src/reader/record.rs                 |  10 +-
 arrow-avro/src/schema.rs                        |  42 +++++--
 arrow-avro/src/writer/encoder.rs                |  24 ++--
 arrow-cast/src/cast/mod.rs                      |  65 ++++------
 arrow-cast/src/pretty.rs                        |   2 +-
 arrow-data/src/data.rs                          |  74 +++++++++---
 arrow-flight/src/encode.rs                      |  38 ++++--
 arrow-flight/src/sql/metadata/sql_info.rs       |   6 +-
 arrow-integration-testing/src/lib.rs            |  12 +-
 arrow-ipc/src/reader.rs                         |  12 +-
 arrow-ipc/src/writer.rs                         |  49 ++++++--
 arrow-json/benches/json_reader.rs               |   6 +-
 arrow-json/src/reader/mod.rs                    |  34 +++---
 arrow-json/src/writer/mod.rs                    |  14 ++-
 arrow-row/src/lib.rs                            | 152 +++++++++++++++++++-----
 arrow-schema/src/datatype_display.rs            |  12 +-
 arrow-schema/src/datatype_parse.rs              |   6 +-
 arrow-schema/src/ffi.rs                         |  14 ++-
 arrow-schema/src/field.rs                       |  12 ++
 arrow-schema/src/fields.rs                      |  10 +-
 arrow/src/util/data_gen.rs                      |   6 +-
 arrow/tests/array_transform.rs                  |  18 ++-
 parquet-variant-compute/src/arrow_to_variant.rs |   6 +-
 parquet-variant-compute/src/cast_to_variant.rs  |  16 ++-
 parquet-variant-compute/src/shred_variant.rs    |   6 +-
 parquet-variant-compute/src/variant_to_arrow.rs |   6 +-
 parquet/src/arrow/array_reader/map_array.rs     |   6 +-
 parquet/src/arrow/arrow_writer/levels.rs        |  10 +-
 parquet/src/arrow/arrow_writer/mod.rs           |  20 ++--
 parquet/src/arrow/schema/mod.rs                 |  12 +-
 36 files changed, 631 insertions(+), 303 deletions(-)

diff --git a/arrow-array/src/array/map_array.rs 
b/arrow-array/src/array/map_array.rs
index c3b809083e..e51c90fca6 100644
--- a/arrow-array/src/array/map_array.rs
+++ b/arrow-array/src/array/map_array.rs
@@ -347,9 +347,13 @@ impl MapArray {
         let entry_offsets_buffer = Buffer::from(entry_offsets.to_byte_slice());
         let keys_data = StringArray::from_iter_values(keys);
 
-        let keys_field = Arc::new(Field::new("keys", DataType::Utf8, false));
+        let keys_field = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            DataType::Utf8,
+            false,
+        ));
         let values_field = Arc::new(Field::new(
-            "values",
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
             values.data_type().clone(),
             values.null_count() > 0,
         ));
@@ -361,7 +365,7 @@ impl MapArray {
 
         let map_data_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 entry_struct.data_type().clone(),
                 false,
             )),
@@ -606,8 +610,16 @@ mod tests {
         //  [[0, 1, 2], [3, 4, 5], [6, 7]]
         let entry_offsets = Buffer::from([0, 3, 6, 8].to_byte_slice());
 
-        let keys = Arc::new(Field::new("keys", DataType::Int32, false));
-        let values = Arc::new(Field::new("values", DataType::UInt32, false));
+        let keys = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            DataType::Int32,
+            false,
+        ));
+        let values = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::UInt32,
+            false,
+        ));
         let entry_struct = StructArray::from(vec![
             (keys, make_array(keys_data)),
             (values, make_array(values_data)),
@@ -616,7 +628,7 @@ mod tests {
         // Construct a map array from the above two
         let map_data_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 entry_struct.data_type().clone(),
                 false,
             )),
@@ -652,8 +664,16 @@ mod tests {
         //  [[0, 1, 2], [3, 4, 5], [6, 7]]
         let entry_offsets = Buffer::from([0, 3, 6, 8].to_byte_slice());
 
-        let keys_field = Arc::new(Field::new("keys", DataType::Int32, false));
-        let values_field = Arc::new(Field::new("values", DataType::UInt32, 
true));
+        let keys_field = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            DataType::Int32,
+            false,
+        ));
+        let values_field = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::UInt32,
+            true,
+        ));
         let entry_struct = StructArray::from(vec![
             (keys_field.clone(), make_array(key_data)),
             (values_field.clone(), make_array(value_data.clone())),
@@ -662,7 +682,7 @@ mod tests {
         // Construct a map array from the above two
         let map_data_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 entry_struct.data_type().clone(),
                 false,
             )),
@@ -773,8 +793,16 @@ mod tests {
         //  [[3, 4, 5], [6, 7]]
         let entry_offsets = Buffer::from([0, 3, 5].to_byte_slice());
 
-        let keys = Arc::new(Field::new("keys", DataType::Int32, false));
-        let values = Arc::new(Field::new("values", DataType::UInt32, false));
+        let keys = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            DataType::Int32,
+            false,
+        ));
+        let values = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::UInt32,
+            false,
+        ));
         let entry_struct = StructArray::from(vec![
             (keys, make_array(keys_data)),
             (values, make_array(values_data)),
@@ -783,7 +811,7 @@ mod tests {
         // Construct a map array from the above two
         let map_data_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 entry_struct.data_type().clone(),
                 false,
             )),
@@ -814,8 +842,8 @@ mod tests {
         // A DictionaryArray has similar buffer layout to a MapArray
         // but the meaning of the values differs
         let struct_t = DataType::Struct(Fields::from(vec![
-            Field::new("keys", DataType::Int32, true),
-            Field::new("values", DataType::UInt32, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::UInt32, 
true),
         ]));
         let dict_t = DataType::Dictionary(Box::new(DataType::Int32), 
Box::new(struct_t));
         let _ = MapArray::from(ArrayData::new_empty(&dict_t));
@@ -846,8 +874,16 @@ mod tests {
 
         let key_array = Arc::new(StringArray::from(vec!["a", "b", "c"])) as 
ArrayRef;
         let value_array = Arc::new(UInt32Array::from(vec![0u32, 10, 20])) as 
ArrayRef;
-        let keys_field = Arc::new(Field::new("keys", DataType::Utf8, false));
-        let values_field = Arc::new(Field::new("values", DataType::UInt32, 
false));
+        let keys_field = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            DataType::Utf8,
+            false,
+        ));
+        let values_field = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::UInt32,
+            false,
+        ));
         let struct_array =
             StructArray::from(vec![(keys_field, key_array), (values_field, 
value_array)]);
         assert_eq!(
@@ -871,8 +907,8 @@ mod tests {
     fn test_try_new() {
         let offsets = OffsetBuffer::new(vec![0, 1, 4, 5].into());
         let fields = Fields::from(vec![
-            Field::new("key", DataType::Int32, false),
-            Field::new("values", DataType::Int32, false),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
         ]);
         let columns = vec![
             Arc::new(Int32Array::from(vec![1, 2, 3, 4, 5])) as _,
@@ -880,7 +916,11 @@ mod tests {
         ];
 
         let entries = StructArray::new(fields.clone(), columns, None);
-        let field = Arc::new(Field::new("entries", DataType::Struct(fields), 
false));
+        let field = Arc::new(Field::new(
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            DataType::Struct(fields),
+            false,
+        ));
 
         MapArray::new(field.clone(), offsets.clone(), entries.clone(), None, 
false);
 
@@ -933,7 +973,11 @@ mod tests {
         ];
 
         let s = StructArray::new(fields.clone(), columns, None);
-        let field = Arc::new(Field::new("entries", DataType::Struct(fields), 
false));
+        let field = Arc::new(Field::new(
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            DataType::Struct(fields),
+            false,
+        ));
         let err = MapArray::try_new(field, offsets, s, None, 
false).unwrap_err();
 
         assert_eq!(
@@ -948,12 +992,16 @@ mod tests {
         let keys = Int32Array::from(vec![Some(1), None]);
         let values = Int32Array::from(vec![None, Some(2)]);
         let fields = Fields::from(vec![
-            Field::new("keys", DataType::Int32, true),
-            Field::new("values", DataType::Int32, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
         ]);
         let entries =
             StructArray::new(fields.clone(), vec![Arc::new(keys), 
Arc::new(values)], None);
-        let field = Arc::new(Field::new("entries", DataType::Struct(fields), 
false));
+        let field = Arc::new(Field::new(
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            DataType::Struct(fields),
+            false,
+        ));
 
         let err = MapArray::try_new(field, OffsetBuffer::from_lengths([2]), 
entries, None, false)
             .unwrap_err();
diff --git a/arrow-array/src/array/mod.rs b/arrow-array/src/array/mod.rs
index e389b462fb..cf1e0b85a0 100644
--- a/arrow-array/src/array/mod.rs
+++ b/arrow-array/src/array/mod.rs
@@ -1178,10 +1178,10 @@ mod tests {
     fn test_null_map() {
         let data_type = DataType::Map(
             Arc::new(Field::new(
-                "entry",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 DataType::Struct(Fields::from(vec![
-                    Field::new("key", DataType::Utf8, false),
-                    Field::new("value", DataType::Int32, true),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 ])),
                 false,
             )),
diff --git a/arrow-array/src/builder/map_builder.rs 
b/arrow-array/src/builder/map_builder.rs
index a6d4918176..d1862af4e8 100644
--- a/arrow-array/src/builder/map_builder.rs
+++ b/arrow-array/src/builder/map_builder.rs
@@ -79,9 +79,9 @@ pub struct MapFieldNames {
 impl Default for MapFieldNames {
     fn default() -> Self {
         Self {
-            entry: "entries".to_string(),
-            key: "keys".to_string(),
-            value: "values".to_string(),
+            entry: Field::MAP_ENTRIES_FIELD_DEFAULT_NAME.to_string(),
+            key: Field::MAP_KEY_FIELD_DEFAULT_NAME.to_string(),
+            value: Field::MAP_VALUE_FIELD_DEFAULT_NAME.to_string(),
         }
     }
 }
@@ -395,10 +395,14 @@ mod tests {
             map.data_type(),
             &DataType::Map(
                 Arc::new(Field::new(
-                    "entries",
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     DataType::Struct(
                         vec![
-                            Arc::new(Field::new("keys", DataType::Int32, 
false)),
+                            Arc::new(Field::new(
+                                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                                DataType::Int32,
+                                false
+                            )),
                             value_field.clone()
                         ]
                         .into()
@@ -419,10 +423,14 @@ mod tests {
             map.data_type(),
             &DataType::Map(
                 Arc::new(Field::new(
-                    "entries",
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     DataType::Struct(
                         vec![
-                            Arc::new(Field::new("keys", DataType::Int32, 
false)),
+                            Arc::new(Field::new(
+                                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                                DataType::Int32,
+                                false
+                            )),
                             value_field
                         ]
                         .into()
@@ -439,7 +447,7 @@ mod tests {
         let mut key_metadata = HashMap::new();
         key_metadata.insert("foo".to_string(), "bar".to_string());
         let key_field = Arc::new(
-            Field::new("keys", DataType::Int32, 
false).with_metadata(key_metadata.clone()),
+            Field::new("other_key", DataType::Int32, 
false).with_metadata(key_metadata.clone()),
         );
         let mut builder = MapBuilder::new(None, Int32Builder::new(), 
Int32Builder::new())
             .with_keys_field(key_field.clone());
@@ -453,14 +461,18 @@ mod tests {
             map.data_type(),
             &DataType::Map(
                 Arc::new(Field::new(
-                    "entries",
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     DataType::Struct(
                         vec![
                             Arc::new(
-                                Field::new("keys", DataType::Int32, false)
+                                Field::new("other_key", DataType::Int32, false)
                                     .with_metadata(key_metadata)
                             ),
-                            Arc::new(Field::new("values", DataType::Int32, 
true))
+                            Arc::new(Field::new(
+                                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                                DataType::Int32,
+                                true
+                            ))
                         ]
                         .into()
                     ),
@@ -511,7 +523,11 @@ mod tests {
     #[should_panic(expected = "Keys field must not be nullable")]
     fn test_with_nullable_keys_field() {
         let mut builder = MapBuilder::new(None, Int32Builder::new(), 
Int32Builder::new())
-            .with_keys_field(Arc::new(Field::new("keys", DataType::Int32, 
true)));
+            .with_keys_field(Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Int32,
+                true,
+            )));
 
         builder.keys().append_value(1);
         builder.values().append_value(2);
@@ -524,7 +540,11 @@ mod tests {
     #[should_panic(expected = "Incorrect datatype")]
     fn test_keys_field_type_mismatch() {
         let mut builder = MapBuilder::new(None, Int32Builder::new(), 
Int32Builder::new())
-            .with_keys_field(Arc::new(Field::new("keys", DataType::Utf8, 
false)));
+            .with_keys_field(Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )));
 
         builder.keys().append_value(1);
         builder.values().append_value(2);
diff --git a/arrow-avro/benches/avro_writer.rs 
b/arrow-avro/benches/avro_writer.rs
index 58b014c5a3..efb8141985 100644
--- a/arrow-avro/benches/avro_writer.rs
+++ b/arrow-avro/benches/avro_writer.rs
@@ -623,10 +623,18 @@ static DECIMAL256_DATA: Lazy<Vec<RecordBatch>> = 
Lazy::new(|| {
 static MAP_DATA: Lazy<Vec<RecordBatch>> = Lazy::new(|| {
     use arrow_array::builder::{MapBuilder, StringBuilder};
 
-    let key_field = Arc::new(Field::new("keys", DataType::Utf8, false));
-    let value_field = Arc::new(Field::new("values", DataType::Utf8, true));
+    let key_field = Arc::new(Field::new(
+        Field::MAP_KEY_FIELD_DEFAULT_NAME,
+        DataType::Utf8,
+        false,
+    ));
+    let value_field = Arc::new(Field::new(
+        Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+        DataType::Utf8,
+        true,
+    ));
     let entry_struct = Field::new(
-        "entries",
+        Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
         DataType::Struct(vec![key_field.as_ref().clone(), 
value_field.as_ref().clone()].into()),
         false,
     );
diff --git a/arrow-avro/src/codec.rs b/arrow-avro/src/codec.rs
index fc101ae0b5..c95218d48f 100644
--- a/arrow-avro/src/codec.rs
+++ b/arrow-avro/src/codec.rs
@@ -931,12 +931,12 @@ impl Codec {
             }
             Self::Struct(f) => DataType::Struct(f.iter().map(|x| 
x.field()).collect()),
             Self::Map(value_type) => {
-                let val_field = value_type.field_with_name("value");
+                let val_field = 
value_type.field_with_name(Field::MAP_VALUE_FIELD_DEFAULT_NAME);
                 DataType::Map(
                     Arc::new(Field::new(
-                        "entries",
+                        Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                         DataType::Struct(Fields::from(vec![
-                            Field::new("key", DataType::Utf8, false),
+                            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                             val_field,
                         ])),
                         false,
diff --git a/arrow-avro/src/reader/mod.rs b/arrow-avro/src/reader/mod.rs
index c837398164..6fb75422a4 100644
--- a/arrow-avro/src/reader/mod.rs
+++ b/arrow-avro/src/reader/mod.rs
@@ -3040,12 +3040,16 @@ mod test {
             list_builder.append(true);
         }
         arrays.push(Arc::new(list_builder.finish()));
-        let values_field = Arc::new(Field::new("value", DataType::Int64, 
false));
+        let values_field = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Int64,
+            false,
+        ));
         let mut map_builder = MapBuilder::new(
             Some(builder::MapFieldNames {
-                entry: "entries".to_string(),
-                key: "key".to_string(),
-                value: "value".to_string(),
+                entry: Field::MAP_ENTRIES_FIELD_DEFAULT_NAME.to_string(),
+                key: Field::MAP_KEY_FIELD_DEFAULT_NAME.to_string(),
+                value: Field::MAP_VALUE_FIELD_DEFAULT_NAME.to_string(),
             }),
             StringBuilder::new(),
             Int64Builder::new(),
@@ -6270,9 +6274,9 @@ mod test {
         iaa_builder.append(true);
         let int_array_array = iaa_builder.finish();
         let field_names = MapFieldNames {
-            entry: "entries".to_string(),
-            key: "key".to_string(),
-            value: "value".to_string(),
+            entry: Field::MAP_ENTRIES_FIELD_DEFAULT_NAME.to_string(),
+            key: Field::MAP_KEY_FIELD_DEFAULT_NAME.to_string(),
+            value: Field::MAP_VALUE_FIELD_DEFAULT_NAME.to_string(),
         };
         let mut int_map_builder =
             MapBuilder::new(Some(field_names), StringBuilder::new(), 
Int32Builder::new());
@@ -6284,9 +6288,9 @@ mod test {
         int_map_builder.append(true).unwrap(); // finalize map for row 0
         let int_map = int_map_builder.finish();
         let field_names2 = MapFieldNames {
-            entry: "entries".to_string(),
-            key: "key".to_string(),
-            value: "value".to_string(),
+            entry: Field::MAP_ENTRIES_FIELD_DEFAULT_NAME.to_string(),
+            key: Field::MAP_KEY_FIELD_DEFAULT_NAME.to_string(),
+            value: Field::MAP_VALUE_FIELD_DEFAULT_NAME.to_string(),
         };
         let mut ima_builder = ListBuilder::new(MapBuilder::new(
             Some(field_names2),
@@ -6372,17 +6376,17 @@ mod test {
             .with_metadata(meta_h.clone());
         // G.value : Struct<{ h: ... }> with metadata (G)
         let g_value_struct_field = Field::new(
-            "value",
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
             DataType::Struct(vec![h_field.clone()].into()),
             true,
         )
         .with_metadata(meta_g_value.clone());
         // entries struct for Map G
         let entries_struct_field = Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(
                 vec![
-                    Field::new("key", DataType::Utf8, false),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                     g_value_struct_field.clone(),
                 ]
                 .into(),
@@ -6441,9 +6445,9 @@ mod test {
                 },
                 {
                     let map_field_names = MapFieldNames {
-                        entry: "entries".to_string(),
-                        key: "key".to_string(),
-                        value: "value".to_string(),
+                        entry: 
Field::MAP_ENTRIES_FIELD_DEFAULT_NAME.to_string(),
+                        key: Field::MAP_KEY_FIELD_DEFAULT_NAME.to_string(),
+                        value: Field::MAP_VALUE_FIELD_DEFAULT_NAME.to_string(),
                     };
                     let i_list_builder = 
ListBuilder::new(Float64Builder::new());
                     let h_struct_builder = StructBuilder::new(
@@ -6469,7 +6473,7 @@ mod test {
                     )
                     .with_values_field(Arc::new(
                         Field::new(
-                            "value",
+                            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                             DataType::Struct(vec![h_field.clone()].into()),
                             true,
                         )
@@ -8703,11 +8707,11 @@ mod test {
         )
         .unwrap();
         let map_entries_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                Field::new("key", DataType::Utf8, false),
+                Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
                 Field::new(
-                    "value",
+                    Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                     DataType::Union(uf_map_vals.clone(), UnionMode::Dense),
                     true,
                 ),
@@ -8737,10 +8741,10 @@ mod test {
             Field::new("y", DataType::Binary, false),
         ]);
         let union_map_entries = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                Field::new("key", DataType::Utf8, false),
-                Field::new("value", DataType::Utf8, false),
+                Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+                Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
             ])),
             false,
         ));
@@ -8919,10 +8923,10 @@ mod test {
             Field::new(item_name, DataType::Struct(kv_fields.clone()), 
false).with_metadata(kv_md),
         );
         let map_int_entries = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                Field::new("key", DataType::Utf8, false),
-                Field::new("value", DataType::Int32, false),
+                Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+                Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, false),
             ])),
             false,
         ));
@@ -9165,8 +9169,8 @@ mod test {
                 let vals = Int32Array::from(vec![1, 2, 10]);
                 let entries = StructArray::new(
                     Fields::from(vec![
-                        Field::new("key", DataType::Utf8, false),
-                        Field::new("value", DataType::Int32, false),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                        Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, false),
                     ]),
                     vec![Arc::new(keys) as ArrayRef, Arc::new(vals) as 
ArrayRef],
                     None,
@@ -9314,8 +9318,8 @@ mod test {
                     let vals = StringArray::from(vec!["v"]);
                     let entries = StructArray::new(
                         Fields::from(vec![
-                            Field::new("key", DataType::Utf8, false),
-                            Field::new("value", DataType::Utf8, false),
+                            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                         ]),
                         vec![Arc::new(keys) as ArrayRef, Arc::new(vals) as 
ArrayRef],
                         None,
@@ -9393,9 +9397,9 @@ mod test {
             });
             let entries = StructArray::new(
                 Fields::from(vec![
-                    Field::new("key", DataType::Utf8, false),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                     Field::new(
-                        "value",
+                        Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                         DataType::Union(uf_map_vals.clone(), UnionMode::Dense),
                         true,
                     ),
diff --git a/arrow-avro/src/reader/record.rs b/arrow-avro/src/reader/record.rs
index 1d152870d7..aeac2fec93 100644
--- a/arrow-avro/src/reader/record.rs
+++ b/arrow-avro/src/reader/record.rs
@@ -505,11 +505,15 @@ impl Decoder {
                 Self::Record(arrow_fields.into(), encodings, field_defaults, 
projector)
             }
             (Codec::Map(child), _) => {
-                let val_field = child.field_with_name("value");
+                let val_field = 
child.field_with_name(ArrowField::MAP_VALUE_FIELD_DEFAULT_NAME);
                 let map_field = Arc::new(ArrowField::new(
-                    "entries",
+                    ArrowField::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     DataType::Struct(Fields::from(vec![
-                        ArrowField::new("key", DataType::Utf8, false),
+                        ArrowField::new(
+                            ArrowField::MAP_KEY_FIELD_DEFAULT_NAME,
+                            DataType::Utf8,
+                            false,
+                        ),
                         val_field,
                     ])),
                     false,
diff --git a/arrow-avro/src/schema.rs b/arrow-avro/src/schema.rs
index 1b0c2e26f7..ab797e7cbc 100644
--- a/arrow-avro/src/schema.rs
+++ b/arrow-avro/src/schema.rs
@@ -2991,11 +2991,19 @@ mod tests {
         let avro_list = AvroSchema::try_from(&list_schema).unwrap();
         assert_json_contains(&avro_list.json_string, "\"type\":\"array\"");
         assert_json_contains(&avro_list.json_string, "\"items\"");
-        let value_field = ArrowField::new("value", DataType::Boolean, true);
+        let value_field = ArrowField::new(
+            arrow_schema::Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Boolean,
+            true,
+        );
         let entries_struct = ArrowField::new(
-            "entries",
+            arrow_schema::Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                ArrowField::new("key", DataType::Utf8, false),
+                ArrowField::new(
+                    arrow_schema::Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                    DataType::Utf8,
+                    false,
+                ),
                 value_field.clone(),
             ])),
             false,
@@ -3193,11 +3201,19 @@ mod tests {
     #[cfg(feature = "avro_custom_types")]
     #[test]
     fn test_map_duration_value_extra() {
-        let val_field = ArrowField::new("value", 
DataType::Duration(TimeUnit::Second), true);
+        let val_field = ArrowField::new(
+            ArrowField::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Duration(TimeUnit::Second),
+            true,
+        );
         let entries_struct = ArrowField::new(
-            "entries",
+            ArrowField::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                ArrowField::new("key", DataType::Utf8, false),
+                ArrowField::new(
+                    ArrowField::MAP_KEY_FIELD_DEFAULT_NAME,
+                    DataType::Utf8,
+                    false,
+                ),
                 val_field,
             ])),
             false,
@@ -3244,11 +3260,19 @@ mod tests {
         );
         let expected_b = ArrowField::new("b", 
DataType::List(Arc::new(expected_list_item)), false);
 
-        let expected_map_value = ArrowField::new("value", DataType::Float64, 
false);
+        let expected_map_value = ArrowField::new(
+            arrow_schema::Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Float64,
+            false,
+        );
         let expected_entries = ArrowField::new(
-            "entries",
+            arrow_schema::Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                ArrowField::new("key", DataType::Utf8, false),
+                ArrowField::new(
+                    arrow_schema::Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                    DataType::Utf8,
+                    false,
+                ),
                 expected_map_value,
             ])),
             false,
diff --git a/arrow-avro/src/writer/encoder.rs b/arrow-avro/src/writer/encoder.rs
index bdfd91ffdd..23ace7d049 100644
--- a/arrow-avro/src/writer/encoder.rs
+++ b/arrow-avro/src/writer/encoder.rs
@@ -1011,7 +1011,7 @@ fn find_struct_child_index(fields: &arrow_schema::Fields, 
name: &str) -> Option<
 
 fn find_map_value_field_index(fields: &arrow_schema::Fields) -> Option<usize> {
     // Prefer common Arrow field names; fall back to second child if exactly 
two
-    find_struct_child_index(fields, "value")
+    find_struct_child_index(fields, Field::MAP_VALUE_FIELD_DEFAULT_NAME)
         .or_else(|| find_struct_child_index(fields, "values"))
         .or_else(|| if fields.len() == 2 { Some(1) } else { None })
 }
@@ -2893,8 +2893,8 @@ mod tests {
         let keys = StringArray::from(vec!["k1", "k2"]);
         let values = Int32Array::from(vec![1, 2]);
         let entries_fields = Fields::from(vec![
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Int32, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
         ]);
         let entries = StructArray::new(
             entries_fields,
@@ -2903,7 +2903,12 @@ mod tests {
         );
         let offsets = arrow_buffer::OffsetBuffer::new(vec![0i32, 2, 2].into());
         let map = MapArray::new(
-            Field::new("entries", entries.data_type().clone(), false).into(),
+            Field::new(
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                entries.data_type().clone(),
+                false,
+            )
+            .into(),
             offsets,
             entries,
             None,
@@ -3378,8 +3383,8 @@ mod tests {
         let values = Int32Array::from(vec![Some(7), None]);
 
         let entries_fields = Fields::from(vec![
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Int32, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
         ]);
         let entries = StructArray::new(
             entries_fields,
@@ -3390,7 +3395,12 @@ mod tests {
         // Single row -> offsets [0, 2]
         let offsets = arrow_buffer::OffsetBuffer::new(vec![0i32, 2].into());
         let map = MapArray::new(
-            Field::new("entries", entries.data_type().clone(), false).into(),
+            Field::new(
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                entries.data_type().clone(),
+                false,
+            )
+            .into(),
             offsets,
             entries,
             None,
diff --git a/arrow-cast/src/cast/mod.rs b/arrow-cast/src/cast/mod.rs
index 20a3068e95..f13e23ffd5 100644
--- a/arrow-cast/src/cast/mod.rs
+++ b/arrow-cast/src/cast/mod.rs
@@ -9138,10 +9138,10 @@ mod tests {
         // Cast null from and to map
         let data_type = DataType::Map(
             Arc::new(Field::new_struct(
-                "entry",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 vec![
-                    Field::new("key", DataType::Utf8, false),
-                    Field::new("value", DataType::Int32, true),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 ],
                 false,
             )),
@@ -10142,15 +10142,7 @@ mod tests {
     fn test_cast_map_dont_allow_change_of_order() {
         let string_builder = StringBuilder::new();
         let value_builder = StringBuilder::new();
-        let mut builder = MapBuilder::new(
-            Some(MapFieldNames {
-                entry: "entries".to_string(),
-                key: "key".to_string(),
-                value: "value".to_string(),
-            }),
-            string_builder,
-            value_builder,
-        );
+        let mut builder = MapBuilder::new(None, string_builder, value_builder);
 
         builder.keys().append_value("0");
         builder.values().append_value("test_val_1");
@@ -10165,11 +10157,11 @@ mod tests {
         let new_ordered = true;
         let new_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 DataType::Struct(
                     vec![
-                        Field::new("key", DataType::Utf8, false),
-                        Field::new("value", DataType::Utf8, false),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                        Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                     ]
                     .into(),
                 ),
@@ -10193,15 +10185,7 @@ mod tests {
     fn test_cast_map_dont_allow_when_container_cant_cast() {
         let string_builder = StringBuilder::new();
         let value_builder = IntervalDayTimeArray::builder(2);
-        let mut builder = MapBuilder::new(
-            Some(MapFieldNames {
-                entry: "entries".to_string(),
-                key: "key".to_string(),
-                value: "value".to_string(),
-            }),
-            string_builder,
-            value_builder,
-        );
+        let mut builder = MapBuilder::new(None, string_builder, value_builder);
 
         builder.keys().append_value("0");
         builder.values().append_value(IntervalDayTime::new(1, 1));
@@ -10216,11 +10200,15 @@ mod tests {
         let new_ordered = true;
         let new_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 DataType::Struct(
                     vec![
-                        Field::new("key", DataType::Utf8, false),
-                        Field::new("value", 
DataType::Duration(TimeUnit::Second), false),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                        Field::new(
+                            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                            DataType::Duration(TimeUnit::Second),
+                            false,
+                        ),
                     ]
                     .into(),
                 ),
@@ -10246,9 +10234,10 @@ mod tests {
         let value_builder = StringBuilder::new();
         let mut builder = MapBuilder::new(
             Some(MapFieldNames {
-                entry: "entries".to_string(),
-                key: "key".to_string(),
-                value: "value".to_string(),
+                // Explicitly writing the name so it will be apparent from 
what names to what names are we converting to
+                entry: Field::MAP_ENTRIES_FIELD_DEFAULT_NAME.to_string(),
+                key: Field::MAP_KEY_FIELD_DEFAULT_NAME.to_string(),
+                value: Field::MAP_VALUE_FIELD_DEFAULT_NAME.to_string(),
             }),
             string_builder,
             value_builder,
@@ -10318,15 +10307,7 @@ mod tests {
     fn test_cast_map_contained_values() {
         let string_builder = StringBuilder::new();
         let value_builder = Int8Builder::new();
-        let mut builder = MapBuilder::new(
-            Some(MapFieldNames {
-                entry: "entries".to_string(),
-                key: "key".to_string(),
-                value: "value".to_string(),
-            }),
-            string_builder,
-            value_builder,
-        );
+        let mut builder = MapBuilder::new(None, string_builder, value_builder);
 
         builder.keys().append_value("0");
         builder.values().append_value(44);
@@ -10339,11 +10320,11 @@ mod tests {
 
         let new_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 DataType::Struct(
                     vec![
-                        Field::new("key", DataType::Utf8, false),
-                        Field::new("value", DataType::Utf8, false),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                        Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                     ]
                     .into(),
                 ),
diff --git a/arrow-cast/src/pretty.rs b/arrow-cast/src/pretty.rs
index 61ce559899..ca6f82a031 100644
--- a/arrow-cast/src/pretty.rs
+++ b/arrow-cast/src/pretty.rs
@@ -1486,7 +1486,7 @@ mod tests {
             Int32Builder::new(),
         )
         .with_values_field(
-            Field::new("values", DataType::Int32, 
true).with_metadata(money_metadata.clone()),
+            Field::new("my_values", DataType::Int32, 
true).with_metadata(money_metadata.clone()),
         );
         array
             .keys()
diff --git a/arrow-data/src/data.rs b/arrow-data/src/data.rs
index 905a57dc4f..0e0ef9e9a4 100644
--- a/arrow-data/src/data.rs
+++ b/arrow-data/src/data.rs
@@ -2834,7 +2834,7 @@ mod tests {
     #[test]
     fn should_fail_validation_when_having_map_entries_only_have_1_field() {
         let struct_data_type = DataType::Struct(Fields::from(vec![Field::new(
-            "key",
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
             DataType::Int32,
             false,
         )]));
@@ -2851,7 +2851,15 @@ mod tests {
         };
 
         let results = test_both_builder_and_array_data(
-            DataType::Map(Field::new("entries", struct_data_type, 
false).into(), false),
+            DataType::Map(
+                Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    struct_data_type,
+                    false,
+                )
+                .into(),
+                false,
+            ),
             1,
             None,
             0,
@@ -2881,8 +2889,8 @@ mod tests {
     #[test]
     fn should_fail_validation_when_having_map_entries_have_3_fields() {
         let struct_data_type = DataType::Struct(Fields::from(vec![
-            Field::new("key", DataType::Int32, false),
-            Field::new("values", DataType::Utf8, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
             Field::new("other", DataType::Int32, true),
         ]));
 
@@ -2902,7 +2910,15 @@ mod tests {
         };
 
         let results = test_both_builder_and_array_data(
-            DataType::Map(Field::new("entries", struct_data_type, 
false).into(), false),
+            DataType::Map(
+                Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    struct_data_type,
+                    false,
+                )
+                .into(),
+                false,
+            ),
             1,
             None,
             0,
@@ -2932,8 +2948,8 @@ mod tests {
     #[test]
     fn should_fail_validation_when_having_nullable_map_keys() {
         let struct_data_type = DataType::Struct(Fields::from(vec![
-            Field::new("key", DataType::Int32, true),
-            Field::new("values", DataType::Utf8, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
         ]));
 
         let key_array_data = valid_non_nullable_int32_array_data(2);
@@ -2949,7 +2965,15 @@ mod tests {
         };
 
         let results = test_both_builder_and_array_data(
-            DataType::Map(Field::new("entries", struct_data_type, 
false).into(), false),
+            DataType::Map(
+                Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    struct_data_type,
+                    false,
+                )
+                .into(),
+                false,
+            ),
             1,
             None,
             0,
@@ -2976,8 +3000,8 @@ mod tests {
     #[test]
     fn should_fail_validation_when_having_entries_is_nullable_for_map() {
         let struct_data_type = DataType::Struct(Fields::from(vec![
-            Field::new("key", DataType::Int32, false),
-            Field::new("values", DataType::Utf8, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
         ]));
 
         let key_array_data = valid_non_nullable_int32_array_data(2);
@@ -2994,7 +3018,15 @@ mod tests {
         };
 
         let results = test_both_builder_and_array_data(
-            DataType::Map(Field::new("entries", struct_data_type, 
true).into(), false),
+            DataType::Map(
+                Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    struct_data_type,
+                    true,
+                )
+                .into(),
+                false,
+            ),
             1,
             None,
             0,
@@ -3022,8 +3054,8 @@ mod tests {
     #[test]
     fn should_allow_to_create_map_from_data() {
         let struct_data_type = DataType::Struct(Fields::from(vec![
-            Field::new("key", DataType::Int32, false),
-            Field::new("values", DataType::Utf8, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
         ]));
 
         let key_array_data = valid_non_nullable_int32_array_data(2);
@@ -3039,7 +3071,15 @@ mod tests {
         };
 
         let results = test_both_builder_and_array_data(
-            DataType::Map(Field::new("entries", struct_data_type, 
false).into(), false),
+            DataType::Map(
+                Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    struct_data_type,
+                    false,
+                )
+                .into(),
+                false,
+            ),
             1,
             None,
             0,
@@ -3085,10 +3125,10 @@ mod tests {
     fn empty_and_null_map_array_should_pass_validation() {
         let dt = DataType::Map(
             Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 DataType::Struct(Fields::from(vec![
-                    Field::new("key", DataType::Int32, false),
-                    Field::new("values", DataType::Utf8, true),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Int32, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, true),
                 ])),
                 false,
             )
diff --git a/arrow-flight/src/encode.rs b/arrow-flight/src/encode.rs
index c88ab71ce4..0b391089ae 100644
--- a/arrow-flight/src/encode.rs
+++ b/arrow-flight/src/encode.rs
@@ -1500,9 +1500,19 @@ mod tests {
 
         let schema = Arc::new(Schema::new(vec![Field::new_map(
             "dict_map",
-            "entries",
-            Field::new_dictionary("keys", DataType::UInt16, DataType::Utf8, 
false),
-            Field::new_dictionary("values", DataType::UInt16, DataType::Utf8, 
true),
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            Field::new_dictionary(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::UInt16,
+                DataType::Utf8,
+                false,
+            ),
+            Field::new_dictionary(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::UInt16,
+                DataType::Utf8,
+                true,
+            ),
             false,
             false,
         )]));
@@ -1517,9 +1527,9 @@ mod tests {
         let mut decoder = FlightDataDecoder::new(encoder);
         let expected_schema = Schema::new(vec![Field::new_map(
             "dict_map",
-            "entries",
-            Field::new("keys", DataType::Utf8, false),
-            Field::new("values", DataType::Utf8, true),
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
             false,
             false,
         )]);
@@ -1596,9 +1606,19 @@ mod tests {
 
         let schema = Arc::new(Schema::new(vec![Field::new_map(
             "dict_map",
-            "entries",
-            Field::new_dictionary("keys", DataType::UInt16, DataType::Utf8, 
false),
-            Field::new_dictionary("values", DataType::UInt16, DataType::Utf8, 
true),
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            Field::new_dictionary(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::UInt16,
+                DataType::Utf8,
+                false,
+            ),
+            Field::new_dictionary(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::UInt16,
+                DataType::Utf8,
+                true,
+            ),
             false,
             false,
         )]));
diff --git a/arrow-flight/src/sql/metadata/sql_info.rs 
b/arrow-flight/src/sql/metadata/sql_info.rs
index 155946ea6c..885d15dd6f 100644
--- a/arrow-flight/src/sql/metadata/sql_info.rs
+++ b/arrow-flight/src/sql/metadata/sql_info.rs
@@ -179,11 +179,11 @@ static UNION_TYPE: Lazy<DataType> = Lazy::new(|| {
             "int32_to_int32_list_map",
             DataType::Map(
                 Arc::new(Field::new(
-                    "entries",
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     DataType::Struct(Fields::from(vec![
-                        Field::new("keys", DataType::Int32, false),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Int32, false),
                         Field::new(
-                            "values",
+                            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                             
DataType::List(Arc::new(Field::new_list_field(DataType::Int32, true))),
                             true,
                         ),
diff --git a/arrow-integration-testing/src/lib.rs 
b/arrow-integration-testing/src/lib.rs
index cf572d769d..613408ae59 100644
--- a/arrow-integration-testing/src/lib.rs
+++ b/arrow-integration-testing/src/lib.rs
@@ -86,18 +86,22 @@ pub fn canonicalize_schema(schema: &Schema) -> Schema {
             DataType::Map(child_field, sorted) => match 
child_field.data_type() {
                 DataType::Struct(fields) if fields.len() == 2 => {
                     let first_field = &fields[0];
-                    let key_field =
-                        Arc::new(Field::new("key", 
first_field.data_type().clone(), false));
+                    let key_field = Arc::new(Field::new(
+                        Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                        first_field.data_type().clone(),
+                        false,
+                    ));
                     let second_field = &fields[1];
                     let value_field = Arc::new(Field::new(
-                        "value",
+                        Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                         second_field.data_type().clone(),
                         second_field.is_nullable(),
                     ));
 
                     let fields = Fields::from([key_field, value_field]);
                     let struct_type = DataType::Struct(fields);
-                    let child_field = Field::new("entries", struct_type, 
false);
+                    let child_field =
+                        Field::new(Field::MAP_ENTRIES_FIELD_DEFAULT_NAME, 
struct_type, false);
 
                     Arc::new(Field::new(
                         field.name().as_str(),
diff --git a/arrow-ipc/src/reader.rs b/arrow-ipc/src/reader.rs
index 09eabd2f7e..9fe1672542 100644
--- a/arrow-ipc/src/reader.rs
+++ b/arrow-ipc/src/reader.rs
@@ -2748,7 +2748,7 @@ mod tests {
 
         #[allow(deprecated)]
         let keys_field = Arc::new(Field::new_dict(
-            "keys",
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
             DataType::Dictionary(Box::new(DataType::Int8), 
Box::new(DataType::Utf8)),
             false,
             1,
@@ -2756,7 +2756,7 @@ mod tests {
         ));
         #[allow(deprecated)]
         let values_field = Arc::new(Field::new_dict(
-            "values",
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
             DataType::Dictionary(Box::new(DataType::Int8), 
Box::new(DataType::Utf8)),
             true,
             2,
@@ -2768,7 +2768,7 @@ mod tests {
         ]);
         let map_data_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 entry_struct.data_type().clone(),
                 false,
             )),
@@ -2959,7 +2959,7 @@ mod tests {
         let key_dict_array = DictionaryArray::new(key_dict_keys, 
utf8_view_array.clone());
         #[allow(deprecated)]
         let keys_field = Arc::new(Field::new_dict(
-            "keys",
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
             DataType::Dictionary(Box::new(DataType::Int8), 
Box::new(DataType::Utf8View)),
             false,
             1,
@@ -2970,7 +2970,7 @@ mod tests {
         let value_dict_array = DictionaryArray::new(value_dict_keys, 
bin_view_array);
         #[allow(deprecated)]
         let values_field = Arc::new(Field::new_dict(
-            "values",
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
             DataType::Dictionary(Box::new(DataType::Int8), 
Box::new(DataType::BinaryView)),
             true,
             2,
@@ -2983,7 +2983,7 @@ mod tests {
 
         let map_data_type = DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 entry_struct.data_type().clone(),
                 false,
             )),
diff --git a/arrow-ipc/src/writer.rs b/arrow-ipc/src/writer.rs
index 6ae6484373..8e0ca81bf1 100644
--- a/arrow-ipc/src/writer.rs
+++ b/arrow-ipc/src/writer.rs
@@ -3692,9 +3692,24 @@ mod tests {
 
     #[test]
     fn encode_map_array() {
-        let keys = Arc::new(Field::new("keys", DataType::UInt32, false));
-        let values = Arc::new(Field::new("values", DataType::UInt32, true));
-        let map_field = Field::new_map("map", "entries", keys, values, false, 
true);
+        let keys = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            DataType::UInt32,
+            false,
+        ));
+        let values = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::UInt32,
+            true,
+        ));
+        let map_field = Field::new_map(
+            "map",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            keys,
+            values,
+            false,
+            true,
+        );
         let schema = Arc::new(Schema::new(vec![map_field]));
 
         let values = Arc::new(generate_map_array_data());
@@ -4026,17 +4041,17 @@ mod tests {
 
         #[allow(deprecated)]
         let entries_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(
                 vec![
                     Field::new_dict(
-                        "key",
+                        Field::MAP_KEY_FIELD_DEFAULT_NAME,
                         DataType::Dictionary(Box::new(DataType::Int32), 
Box::new(DataType::Utf8)),
                         false,
                         1,
                         false,
                     ),
-                    Field::new("value", DataType::Int32, true),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 ]
                 .into(),
             ),
@@ -4046,14 +4061,18 @@ mod tests {
         let entries = StructArray::from(vec![
             (
                 Arc::new(Field::new(
-                    "key",
+                    Field::MAP_KEY_FIELD_DEFAULT_NAME,
                     DataType::Dictionary(Box::new(DataType::Int32), 
Box::new(DataType::Utf8)),
                     false,
                 )),
                 Arc::new(dict_keys) as ArrayRef,
             ),
             (
-                Arc::new(Field::new("value", DataType::Int32, true)),
+                Arc::new(Field::new(
+                    Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                    DataType::Int32,
+                    true,
+                )),
                 Arc::new(values) as ArrayRef,
             ),
         ]);
@@ -4094,12 +4113,12 @@ mod tests {
 
         #[allow(deprecated)]
         let entries_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(
                 vec![
-                    Field::new("key", DataType::Utf8, false),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
                     Field::new_dict(
-                        "value",
+                        Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                         DataType::Dictionary(Box::new(DataType::Int32), 
Box::new(DataType::Utf8)),
                         true,
                         2,
@@ -4113,12 +4132,16 @@ mod tests {
 
         let entries = StructArray::from(vec![
             (
-                Arc::new(Field::new("key", DataType::Utf8, false)),
+                Arc::new(Field::new(
+                    Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                    DataType::Utf8,
+                    false,
+                )),
                 Arc::new(keys) as ArrayRef,
             ),
             (
                 Arc::new(Field::new(
-                    "value",
+                    Field::MAP_VALUE_FIELD_DEFAULT_NAME,
                     DataType::Dictionary(Box::new(DataType::Int32), 
Box::new(DataType::Utf8)),
                     true,
                 )),
diff --git a/arrow-json/benches/json_reader.rs 
b/arrow-json/benches/json_reader.rs
index 36ab1b82fe..3fb35f2d55 100644
--- a/arrow-json/benches/json_reader.rs
+++ b/arrow-json/benches/json_reader.rs
@@ -363,11 +363,11 @@ fn build_map_values(rows: usize, entries: usize) -> 
Vec<Value> {
 
 fn build_map_schema() -> Arc<Schema> {
     let entries_field = Arc::new(Field::new(
-        "entries",
+        Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
         DataType::Struct(
             vec![
-                Field::new("keys", DataType::Utf8, false),
-                Field::new("values", DataType::Int64, true),
+                Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+                Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int64, true),
             ]
             .into(),
         ),
diff --git a/arrow-json/src/reader/mod.rs b/arrow-json/src/reader/mod.rs
index b0a2c9fc25..c14c1f9ea0 100644
--- a/arrow-json/src/reader/mod.rs
+++ b/arrow-json/src/reader/mod.rs
@@ -1287,9 +1287,13 @@ mod tests {
         "#;
         let map = Field::new_map(
             "map",
-            "entries",
-            Field::new("key", DataType::Utf8, false),
-            Field::new_list("value", Field::new("element", DataType::Utf8, 
true), true),
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new_list(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                Field::new("element", DataType::Utf8, true),
+                true,
+            ),
             false,
             true,
         );
@@ -2993,9 +2997,9 @@ mod tests {
             Field::new("b", DataType::new_list(DataType::Int32, true), true),
             Field::new_map(
                 "c",
-                "entries",
-                Field::new("keys", DataType::Utf8, false),
-                Field::new("values", DataType::Int32, true),
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+                Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 false,
                 false,
             ),
@@ -3183,10 +3187,10 @@ mod tests {
                 "map",
                 DataType::Map(
                     Arc::new(Field::new(
-                        "entries",
+                        Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                         DataType::Struct(Fields::from(vec![
-                            Field::new("keys", DataType::Utf8, false),
-                            Field::new("values", DataType::Utf8, true),
+                            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, true),
                         ])),
                         false, // not nullable
                     )),
@@ -3441,10 +3445,10 @@ mod tests {
                 "map",
                 DataType::Map(
                     Arc::new(Field::new(
-                        "entries",
+                        Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                         DataType::Struct(Fields::from(vec![
-                            Field::new("keys", DataType::Utf8, false),
-                            Field::new("values", DataType::Utf8, true),
+                            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, true),
                         ])),
                         false, // not nullable
                     )),
@@ -3502,10 +3506,10 @@ mod tests {
                 "map",
                 DataType::Map(
                     Arc::new(Field::new(
-                        "entries",
+                        Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                         DataType::Struct(Fields::from(vec![
-                            Field::new("keys", DataType::Utf8, false),
-                            Field::new("values", DataType::Utf8, true),
+                            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Utf8, true),
                         ])),
                         false, // not nullable
                     )),
diff --git a/arrow-json/src/writer/mod.rs b/arrow-json/src/writer/mod.rs
index 559916d06a..341779afed 100644
--- a/arrow-json/src/writer/mod.rs
+++ b/arrow-json/src/writer/mod.rs
@@ -1421,15 +1421,23 @@ mod tests {
     fn run_json_writer_map_with_keys(keys_array: ArrayRef) {
         let values_array = super::Int64Array::from(vec![10, 20, 30, 40, 50]);
 
-        let keys_field = Arc::new(Field::new("keys", 
keys_array.data_type().clone(), false));
-        let values_field = Arc::new(Field::new("values", DataType::Int64, 
false));
+        let keys_field = Arc::new(Field::new(
+            Field::MAP_KEY_FIELD_DEFAULT_NAME,
+            keys_array.data_type().clone(),
+            false,
+        ));
+        let values_field = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Int64,
+            false,
+        ));
         let entry_struct = StructArray::from(vec![
             (keys_field, keys_array.clone()),
             (values_field, Arc::new(values_array) as ArrayRef),
         ]);
 
         let entries_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             entry_struct.data_type().clone(),
             false,
         ));
diff --git a/arrow-row/src/lib.rs b/arrow-row/src/lib.rs
index 257707469d..0773f08f26 100644
--- a/arrow-row/src/lib.rs
+++ b/arrow-row/src/lib.rs
@@ -4406,7 +4406,11 @@ mod tests {
     #[test]
     fn test_single_map_with_non_nullable_values() {
         // Use `with_values_field` on `MapBuilder` to set the values are not 
nullable
-        let value_field = Arc::new(Field::new("values", DataType::Int32, 
false));
+        let value_field = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Int32,
+            false,
+        ));
         let mut builder = MapBuilder::new(None, StringBuilder::new(), 
Int32Builder::new())
             .with_values_field(value_field);
         // Entry 0: {"a": 1, "b": 2}
@@ -4444,7 +4448,11 @@ mod tests {
     #[test]
     fn test_single_map_with_non_nullable_map_but_with_nullable_values() {
         // Map column is non-nullable, but values are nullable
-        let value_field = Arc::new(Field::new("values", DataType::Int32, 
true));
+        let value_field = Arc::new(Field::new(
+            Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+            DataType::Int32,
+            true,
+        ));
         let mut builder = MapBuilder::new(None, StringBuilder::new(), 
Int32Builder::new())
             .with_values_field(value_field);
 
@@ -4825,9 +4833,17 @@ mod tests {
         let nulls = NullBuffer::from_iter((0..len).map(|_| 
rng.random_bool(valid_percent)));
         let field = Arc::new(Field::new_map(
             "",
-            "entries",
-            Field::new("keys", keys.data_type().clone(), false),
-            Field::new("values", values.data_type().clone(), true),
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                keys.data_type().clone(),
+                false,
+            ),
+            Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                values.data_type().clone(),
+                true,
+            ),
             false,
             true,
         ));
@@ -6280,11 +6296,19 @@ mod tests {
 
         let offsets = OffsetBuffer::new(vec![0, 1, 1, 3].into());
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
@@ -6311,11 +6335,19 @@ mod tests {
 
         let offsets = OffsetBuffer::new(vec![0, 1, 1, 3].into());
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
@@ -6341,11 +6373,19 @@ mod tests {
 
         let offsets = OffsetBuffer::new(vec![0i32].into());
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
@@ -6369,11 +6409,19 @@ mod tests {
 
         let offsets = OffsetBuffer::new(vec![0, 1, 1, 3].into());
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
@@ -6399,11 +6447,19 @@ mod tests {
 
         let offsets = OffsetBuffer::new(vec![0, 0, 0, 0].into());
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
@@ -6432,11 +6488,19 @@ mod tests {
         let inner_null_values = Arc::new(NullArray::new(3)) as ArrayRef;
 
         let inner_entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let inner_struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(inner_entries_fields.clone().into()),
             false,
         ));
@@ -6460,11 +6524,19 @@ mod tests {
 
         let inner_map_type = DataType::Map(inner_struct_field.clone(), false);
         let outer_entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", inner_map_type, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                inner_map_type,
+                true,
+            )),
         ];
         let outer_struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(outer_entries_fields.clone().into()),
             false,
         ));
@@ -6499,11 +6571,19 @@ mod tests {
         let null_values = Arc::new(NullArray::new(3)) as ArrayRef;
 
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", DataType::Null, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Null,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
@@ -6550,11 +6630,19 @@ mod tests {
 
         let list_type = list_array.data_type().clone();
         let entries_fields = vec![
-            Arc::new(Field::new("keys", DataType::Utf8, false)),
-            Arc::new(Field::new("values", list_type, true)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Utf8,
+                false,
+            )),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                list_type,
+                true,
+            )),
         ];
         let struct_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields.clone().into()),
             false,
         ));
diff --git a/arrow-schema/src/datatype_display.rs 
b/arrow-schema/src/datatype_display.rs
index cca7cf254f..5b0ff86fce 100644
--- a/arrow-schema/src/datatype_display.rs
+++ b/arrow-schema/src/datatype_display.rs
@@ -432,11 +432,11 @@ mod tests {
     #[test]
     fn test_display_map() {
         let entry_field = Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(
                 vec![
-                    Field::new("key", DataType::Utf8, false),
-                    Field::new("value", DataType::Int32, true),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 ]
                 .into(),
             ),
@@ -450,11 +450,11 @@ mod tests {
 
         // Test with metadata
         let mut entry_field_with_metadata = Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(
                 vec![
-                    Field::new("key", DataType::Utf8, false),
-                    Field::new("value", DataType::Int32, true),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 ]
                 .into(),
             ),
diff --git a/arrow-schema/src/datatype_parse.rs 
b/arrow-schema/src/datatype_parse.rs
index 1be24a5745..abb7058a32 100644
--- a/arrow-schema/src/datatype_parse.rs
+++ b/arrow-schema/src/datatype_parse.rs
@@ -1209,9 +1209,9 @@ mod test {
             DataType::Map(
                 Arc::new(Field::new_map(
                     "nested_map",
-                    "entries",
-                    Field::new("key", DataType::Utf8, false),
-                    Field::new("value", DataType::Int32, true),
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                     false,
                     true,
                 )),
diff --git a/arrow-schema/src/ffi.rs b/arrow-schema/src/ffi.rs
index c2df07376f..435526f188 100644
--- a/arrow-schema/src/ffi.rs
+++ b/arrow-schema/src/ffi.rs
@@ -950,13 +950,19 @@ mod tests {
 
     #[test]
     fn test_map_keys_sorted() {
-        let keys = Field::new("keys", DataType::Int32, false);
-        let values = Field::new("values", DataType::UInt32, false);
+        let keys = Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Int32, false);
+        let values = Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::UInt32, false);
         let entry_struct = DataType::Struct(vec![keys, values].into());
 
         // Construct a map array from the above two
-        let map_data_type =
-            DataType::Map(Arc::new(Field::new("entries", entry_struct, 
false)), true);
+        let map_data_type = DataType::Map(
+            Arc::new(Field::new(
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                entry_struct,
+                false,
+            )),
+            true,
+        );
 
         let arrow_schema = FFI_ArrowSchema::try_from(map_data_type).unwrap();
         assert!(arrow_schema.map_keys_sorted());
diff --git a/arrow-schema/src/field.rs b/arrow-schema/src/field.rs
index 0d12728ca2..a5d272f49f 100644
--- a/arrow-schema/src/field.rs
+++ b/arrow-schema/src/field.rs
@@ -181,6 +181,18 @@ impl AsRef<Field> for Field {
 impl Field {
     /// Default list member field name
     pub const LIST_FIELD_DEFAULT_NAME: &'static str = "item";
+    /// Default field name for the entries field for Map
+    ///
+    /// See [Arrow 
Spec](https://github.com/apache/arrow/blob/b19c4761b558ade94ae05743062d92aacedef10e/format/Schema.fbs#L127-L138))
+    pub const MAP_ENTRIES_FIELD_DEFAULT_NAME: &'static str = "entries";
+    /// Default field name for the key field for Map
+    ///
+    /// See [Arrow 
Spec](https://github.com/apache/arrow/blob/b19c4761b558ade94ae05743062d92aacedef10e/format/Schema.fbs#L127-L138))
+    pub const MAP_KEY_FIELD_DEFAULT_NAME: &'static str = "key";
+    /// Default field name for the value field for Map
+    ///
+    /// See [Arrow 
Spec](https://github.com/apache/arrow/blob/b19c4761b558ade94ae05743062d92aacedef10e/format/Schema.fbs#L127-L138))
+    pub const MAP_VALUE_FIELD_DEFAULT_NAME: &'static str = "value";
 
     /// Creates a new field with the given name, data type, and nullability
     ///
diff --git a/arrow-schema/src/fields.rs b/arrow-schema/src/fields.rs
index 3d19cb963f..f06d5631ed 100644
--- a/arrow-schema/src/fields.rs
+++ b/arrow-schema/src/fields.rs
@@ -675,9 +675,13 @@ mod tests {
             ),
             Field::new_map(
                 "g",
-                "entries",
-                Field::new("keys", DataType::LargeUtf8, false),
-                Field::new("values", DataType::Int32, true),
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                Field::new(
+                    Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                    DataType::LargeUtf8,
+                    false,
+                ),
+                Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                 false,
                 false,
             ),
diff --git a/arrow/src/util/data_gen.rs b/arrow/src/util/data_gen.rs
index 481fb9e3a4..b5eb9efbc3 100644
--- a/arrow/src/util/data_gen.rs
+++ b/arrow/src/util/data_gen.rs
@@ -819,9 +819,9 @@ mod tests {
     fn test_create_map_array() {
         let map_field = Field::new_map(
             "map",
-            "entries",
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Utf8, true),
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
             false,
             false,
         );
diff --git a/arrow/tests/array_transform.rs b/arrow/tests/array_transform.rs
index 548e7c3a26..630e9fd596 100644
--- a/arrow/tests/array_transform.rs
+++ b/arrow/tests/array_transform.rs
@@ -798,11 +798,19 @@ fn test_map_nulls_append() {
 
     let expected_entry_array = StructArray::from(vec![
         (
-            Arc::new(Field::new("keys", DataType::Int64, false)),
+            Arc::new(Field::new(
+                Field::MAP_KEY_FIELD_DEFAULT_NAME,
+                DataType::Int64,
+                false,
+            )),
             Arc::new(expected_key_array) as ArrayRef,
         ),
         (
-            Arc::new(Field::new("values", DataType::Int64, true)),
+            Arc::new(Field::new(
+                Field::MAP_VALUE_FIELD_DEFAULT_NAME,
+                DataType::Int64,
+                true,
+            )),
             Arc::new(expected_value_array) as ArrayRef,
         ),
     ]);
@@ -812,10 +820,10 @@ fn test_map_nulls_append() {
     let expected_list_data = ArrayData::try_new(
         DataType::Map(
             Arc::new(Field::new(
-                "entries",
+                Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                 DataType::Struct(Fields::from(vec![
-                    Field::new("keys", DataType::Int64, false),
-                    Field::new("values", DataType::Int64, true),
+                    Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Int64, false),
+                    Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int64, true),
                 ])),
                 false,
             )),
diff --git a/parquet-variant-compute/src/arrow_to_variant.rs 
b/parquet-variant-compute/src/arrow_to_variant.rs
index 03a84109ff..b9e7fff064 100644
--- a/parquet-variant-compute/src/arrow_to_variant.rs
+++ b/parquet-variant-compute/src/arrow_to_variant.rs
@@ -1378,8 +1378,8 @@ mod tests {
         let keys = StringArray::from(vec!["key1", "key2", "key3"]);
         let values = Int32Array::from(vec![1, 2, 3]);
         let entries_fields = Fields::from(vec![
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Int32, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
         ]);
         let entries = StructArray::new(
             entries_fields.clone(),
@@ -1399,7 +1399,7 @@ mod tests {
 
         // Create the map field
         let map_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields),
             false, // Keys are non-nullable
         ));
diff --git a/parquet-variant-compute/src/cast_to_variant.rs 
b/parquet-variant-compute/src/cast_to_variant.rs
index 1b26ffe07d..ef90e61373 100644
--- a/parquet-variant-compute/src/cast_to_variant.rs
+++ b/parquet-variant-compute/src/cast_to_variant.rs
@@ -1983,8 +1983,8 @@ mod tests {
         let keys = StringArray::from(vec!["key1", "key2", "key3"]);
         let values = Int32Array::from(vec![1, 2, 3]);
         let entries_fields = Fields::from(vec![
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Int32, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
true),
         ]);
         let entries = StructArray::new(
             entries_fields.clone(),
@@ -1999,7 +1999,7 @@ mod tests {
         let null_buffer = Some(NullBuffer::from(vec![true, true, false, 
true]));
 
         let map_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(entries_fields),
             false,
         ));
@@ -2039,8 +2039,8 @@ mod tests {
     fn test_cast_to_variant_map_with_non_string_keys() {
         let offsets = OffsetBuffer::new(vec![0, 1, 3].into());
         let fields = Fields::from(vec![
-            Field::new("key", DataType::Int32, false),
-            Field::new("values", DataType::Int32, false),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Int32, 
false),
         ]);
         let columns = vec![
             Arc::new(Int32Array::from(vec![1, 2, 3])) as _,
@@ -2048,7 +2048,11 @@ mod tests {
         ];
 
         let entries = StructArray::new(fields.clone(), columns, None);
-        let field = Arc::new(Field::new("entries", DataType::Struct(fields), 
false));
+        let field = Arc::new(Field::new(
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+            DataType::Struct(fields),
+            false,
+        ));
 
         let map_array = MapArray::new(field.clone(), offsets.clone(), 
entries.clone(), None, false);
 
diff --git a/parquet-variant-compute/src/shred_variant.rs 
b/parquet-variant-compute/src/shred_variant.rs
index 48ecdc2bc2..7753fce0f6 100644
--- a/parquet-variant-compute/src/shred_variant.rs
+++ b/parquet-variant-compute/src/shred_variant.rs
@@ -1476,10 +1476,10 @@ mod tests {
             ),
             DataType::Map(
                 Arc::new(Field::new(
-                    "entries",
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     DataType::Struct(Fields::from(vec![
-                        Field::new("key", DataType::Utf8, false),
-                        Field::new("value", DataType::Int32, true),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
DataType::Utf8, false),
+                        Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Int32, true),
                     ])),
                     false,
                 )),
diff --git a/parquet-variant-compute/src/variant_to_arrow.rs 
b/parquet-variant-compute/src/variant_to_arrow.rs
index 2ba274a3c2..8022ded25a 100644
--- a/parquet-variant-compute/src/variant_to_arrow.rs
+++ b/parquet-variant-compute/src/variant_to_arrow.rs
@@ -1460,10 +1460,10 @@ mod tests {
         let item_field = Arc::new(Field::new("item", DataType::Int32, true));
         let struct_fields = Fields::from(vec![Field::new("child", 
DataType::Int32, true)]);
         let map_entries_field = Arc::new(Field::new(
-            "entries",
+            Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
             DataType::Struct(Fields::from(vec![
-                Field::new("key", DataType::Utf8, false),
-                Field::new("value", DataType::Float64, true),
+                Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+                Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
DataType::Float64, true),
             ])),
             true,
         ));
diff --git a/parquet/src/arrow/array_reader/map_array.rs 
b/parquet/src/arrow/array_reader/map_array.rs
index 5d88df6cea..117f3b73ba 100644
--- a/parquet/src/arrow/array_reader/map_array.rs
+++ b/parquet/src/arrow/array_reader/map_array.rs
@@ -158,10 +158,10 @@ mod tests {
             "map",
             ArrowType::Map(
                 Arc::new(Field::new(
-                    "entries",
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
                     ArrowType::Struct(Fields::from(vec![
-                        Field::new("keys", ArrowType::Utf8, false),
-                        Field::new("values", ArrowType::Int32, true),
+                        Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, 
ArrowType::Utf8, false),
+                        Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, 
ArrowType::Int32, true),
                     ])),
                     false,
                 )),
diff --git a/parquet/src/arrow/arrow_writer/levels.rs 
b/parquet/src/arrow/arrow_writer/levels.rs
index 8abdbcc77d..8918cfb148 100644
--- a/parquet/src/arrow/arrow_writer/levels.rs
+++ b/parquet/src/arrow/arrow_writer/levels.rs
@@ -1930,13 +1930,17 @@ mod tests {
         {"stocks":{"hedged": "$YYY", "long": null, "short": "$D"}}
         "#;
         let entries_struct_type = DataType::Struct(Fields::from(vec![
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Utf8, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
         ]));
         let stocks_field = Field::new(
             "stocks",
             DataType::Map(
-                Arc::new(Field::new("entries", entries_struct_type, false)),
+                Arc::new(Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    entries_struct_type,
+                    false,
+                )),
                 false,
             ),
             // not nullable, so the keys have max level = 1
diff --git a/parquet/src/arrow/arrow_writer/mod.rs 
b/parquet/src/arrow/arrow_writer/mod.rs
index 95d433a461..37d85cf7da 100644
--- a/parquet/src/arrow/arrow_writer/mod.rs
+++ b/parquet/src/arrow/arrow_writer/mod.rs
@@ -2751,13 +2751,17 @@ mod tests {
         {"stocks":{"hedged": "$YYY", "long": null, "short": "$D"}}
         "#;
         let entries_struct_type = DataType::Struct(Fields::from(vec![
-            Field::new("key", DataType::Utf8, false),
-            Field::new("value", DataType::Utf8, true),
+            Field::new(Field::MAP_KEY_FIELD_DEFAULT_NAME, DataType::Utf8, 
false),
+            Field::new(Field::MAP_VALUE_FIELD_DEFAULT_NAME, DataType::Utf8, 
true),
         ]));
         let stocks_field = Field::new(
             "stocks",
             DataType::Map(
-                Arc::new(Field::new("entries", entries_struct_type, false)),
+                Arc::new(Field::new(
+                    Field::MAP_ENTRIES_FIELD_DEFAULT_NAME,
+                    entries_struct_type,
+                    false,
+                )),
                 false,
             ),
             true,
@@ -3896,9 +3900,9 @@ mod tests {
             Field::new_list("my_list", Field::new("item", DataType::Int32, 
false), false);
         let map_field = Field::new_map(
             "my_map",
-            "entries",
-            Field::new("keys", DataType::Int32, false),
-            Field::new("values", DataType::Int32, true),
+            "my_entries",
+            Field::new("my_keys", DataType::Int32, false),
+            Field::new("my_values", DataType::Int32, true),
             false,
             true,
         );
@@ -3926,9 +3930,9 @@ mod tests {
         let map_field = &schema.get_fields()[1].get_fields()[0];
         // Coerced name of "entries" should be "key_value"
         assert_eq!(map_field.name(), "key_value");
-        // Coerced name of "keys" should be "key"
+        // Coerced name of "my_keys" should be "key"
         assert_eq!(map_field.get_fields()[0].name(), "key");
-        // Coerced name of "values" should be "value"
+        // Coerced name of "my_values" should be "value"
         assert_eq!(map_field.get_fields()[1].name(), "value");
 
         // Double check schema after reading from the file
diff --git a/parquet/src/arrow/schema/mod.rs b/parquet/src/arrow/schema/mod.rs
index 7878e7c49b..f1d7ea7e88 100644
--- a/parquet/src/arrow/schema/mod.rs
+++ b/parquet/src/arrow/schema/mod.rs
@@ -1731,9 +1731,9 @@ mod tests {
             ),
             Field::new_map(
                 "my_map",
-                "entries",
-                Field::new("keys", DataType::Utf8, false),
-                Field::new("values", DataType::Int32, true),
+                "my_entries",
+                Field::new("my_keys", DataType::Utf8, false),
+                Field::new("my_values", DataType::Int32, true),
                 false,
                 true,
             ),
@@ -1776,9 +1776,9 @@ mod tests {
                 }
             }
             OPTIONAL GROUP my_map (MAP) {
-                REPEATED GROUP entries {
-                    REQUIRED BINARY keys (STRING);
-                    OPTIONAL INT32 values;
+                REPEATED GROUP my_entries {
+                    REQUIRED BINARY my_keys (STRING);
+                    OPTIONAL INT32 my_values;
                 }
             }
         }


Reply via email to