|
5 | 5 |
|
6 | 6 | import static org.junit.jupiter.api.Assertions.*; |
7 | 7 |
|
| 8 | +import dev.vortex.relocated.org.apache.arrow.vector.types.pojo.ArrowType; |
8 | 9 | import org.apache.spark.sql.types.DataTypes; |
9 | 10 | import org.apache.spark.sql.types.StructField; |
10 | 11 | import org.apache.spark.sql.types.StructType; |
@@ -48,6 +49,48 @@ public void testSparkToArrowSchemaConversion() { |
48 | 49 | assertEquals("active", arrowSchema.getFields().get(3).getName()); |
49 | 50 | } |
50 | 51 |
|
| 52 | + @Test |
| 53 | + @DisplayName("SparkToArrowSchema should convert nested types") |
| 54 | + public void testNestedSparkToArrowSchemaConversion() { |
| 55 | + // Create a more complex spark schema |
| 56 | + StructType sparkSchema = DataTypes.createStructType(new StructField[] { |
| 57 | + DataTypes.createStructField( |
| 58 | + "inner", |
| 59 | + DataTypes.createStructType(new StructField[] { |
| 60 | + DataTypes.createStructField("id", DataTypes.IntegerType, false), |
| 61 | + DataTypes.createStructField("name", DataTypes.StringType, true), |
| 62 | + DataTypes.createStructField("value", DataTypes.DoubleType, false), |
| 63 | + DataTypes.createStructField("active", DataTypes.BooleanType, true) |
| 64 | + }), |
| 65 | + false) |
| 66 | + }); |
| 67 | + |
| 68 | + // Convert to Arrow schema |
| 69 | + var arrowSchema = dev.vortex.spark.write.SparkToArrowSchema.convert(sparkSchema); |
| 70 | + |
| 71 | + // Verify conversion |
| 72 | + assertNotNull(arrowSchema, "Arrow schema should not be null"); |
| 73 | + assertEquals(1, arrowSchema.getFields().size(), "Arrow schema should have same number of fields"); |
| 74 | + |
| 75 | + // Should contain the right inner fields |
| 76 | + var nestedFields = arrowSchema.getFields().get(0).getChildren(); |
| 77 | + |
| 78 | + // Verify field types are preserved |
| 79 | + assertInstanceOf(ArrowType.Struct.class, arrowSchema.getFields().get(0).getType()); |
| 80 | + |
| 81 | + assertEquals("id", nestedFields.get(0).getName()); |
| 82 | + assertInstanceOf(ArrowType.Int.class, nestedFields.get(0).getType()); |
| 83 | + |
| 84 | + assertEquals("name", nestedFields.get(1).getName()); |
| 85 | + assertInstanceOf(ArrowType.Utf8.class, nestedFields.get(1).getType()); |
| 86 | + |
| 87 | + assertEquals("value", nestedFields.get(2).getName()); |
| 88 | + assertInstanceOf(ArrowType.FloatingPoint.class, nestedFields.get(2).getType()); |
| 89 | + |
| 90 | + assertEquals("active", nestedFields.get(3).getName()); |
| 91 | + assertInstanceOf(ArrowType.Bool.class, nestedFields.get(3).getType()); |
| 92 | + } |
| 93 | + |
51 | 94 | @Test |
52 | 95 | @DisplayName("VortexWriterCommitMessage should store metadata correctly") |
53 | 96 | public void testWriterCommitMessage() { |
|
0 commit comments