| 563 | } |
| 564 | |
| 565 | func writeAttributeIndex[T any](in string, index []T) error { |
| 566 | stat, err := os.Stat(filepath.Join(in, "data.parquet")) |
| 567 | if err != nil { |
| 568 | return err |
| 569 | } |
| 570 | |
| 571 | out, err := os.OpenFile(filepath.Join(in, "index.parquet"), os.O_WRONLY|os.O_CREATE|os.O_TRUNC, stat.Mode()) |
| 572 | if err != nil { |
| 573 | return err |
| 574 | } |
| 575 | defer out.Close() |
| 576 | |
| 577 | writer := parquet.NewGenericWriter[T](out) |
| 578 | defer writer.Close() |
| 579 | |
| 580 | writeCount := 0 |
| 581 | for writeCount < len(index) { |
| 582 | n, err := writer.Write(index[writeCount:]) |
| 583 | if err != nil { |
| 584 | return err |
| 585 | } |
| 586 | writeCount += n |
| 587 | } |
| 588 | |
| 589 | err = writer.Flush() |
| 590 | if err != nil { |
| 591 | return err |
| 592 | } |
| 593 | |
| 594 | return nil |
| 595 | } |
| 596 | |
| 597 | type fileStats struct { |
| 598 | Traces int |