Я работаю с некоторыми паркетными файлами, где я читаю файл, делающий что -то, а затем добавляю новые столбцы с исходными столбцами в новый файл паркета. < /p>
using Stream fileStream = File.OpenRead(sourceFile);
using var parquetReader = new ParquetReader(fileStream);
Schema schema = parquetReader.Schema;
DataField[] dataFields = schema.GetDataFields();
var firstColumn= new List
();
и в цикле FOR, который итерации через parquetReader.RowGroupCount У меня есть следующее:
using ParquetRowGroupReader groupReader = parquetReader.OpenRowGroupReader(i);
Parquet.Data.DataColumn[] rowGroupColumns = dataFields.Select(groupReader.ReadColumn).ToArray();
FirstColumns.Add(rowGroupColumns.First(x => x.Field.Name == Settings.FirstColumnName));
< /code>
Теперь после чтения и обработки я хочу добавить исходные данные вместе с новыми данными в новый файл паркета. В целях тестирования я хотел просто написать первый столбец, выполнив следующее: < /p>
var FirstColumn = new Parquet.Data.DataColumn(
new Parquet.Data.DataField(Settings.FirstColumnName),
firstColumns.Select(x=>x.Data).ToArray());
Schema newSchema = new Schema(FirstColumn.Field);
using Stream writeFileStream = File.Create(outputFile);
using var parquetWriter = new ParquetWriter(newSchema, writeFileStream);
using ParquetRowGroupWriter groupWriter = parquetWriter.CreateRowGroup();
groupWriter.WriteColumn(FirstColumn);
< /code>
FirstColumn - это в основном столбец, который состоит из целых чисел. Если я сделаю < /p>
Log.Info(firstColumns.Select(x=>x.Data).ToArray()))
< /code>
Я получаю следующее: < /p>
Array[] {Nullable`1[] {304058000, 2955550, 268882222, 2442509222}}
< /code>
Теперь, после запуска, я получаю следующую ошибку: < /p>
error: System.InvalidCastException: Unable to cast object of type 'System.Array[]' to type 'System.String[]'.
< /code>
Таким образом, мне нужно что -то вроде (просто предположение): < /p>
String[] {Nullable`1[] {"304058000", "2955550", "268882222", "2442509222"}}
< /code>
Я пытался преобразовать в строку, выполнив следующее: < /p>
var firstColumn = new Parquet.Data.DataColumn(
new Parquet.Data.DataField(Settings.FirstColumnName),
firstColumns.Select(x=>x.Data.ToString()).ToArray());
< /code>
Я также пытался, используя array.convertall без успеха. Если я распечатаю его: < /p>
Log.Info(firstColumns.Select(x=>x.Data.ToString()).ToArray());
< /code>
Я получаю следующий, а не ожидаемый вывод, написанный выше: < /p>
String[] {System.Nullable`1[System.Int64][]}
Я мог бы сделать это трудным способом (и/или неправильным способом), все, что я хочу сделать, это просто скопировать исходные данные в новую парку с добавленными столбцами. Вероятно, существует более простой способ напрямую просто использовать исходные столбцы с данными. < /P>
для ссылки. Я использую следующий пакет: https://github.com/aloneguid/parquet-dotnet! Это просто исходные данные из исходного файла, с которым у меня проблемы. < /P>
Тип .data: < /p>
Parquet.Data.DataColumn firstColumn = rowGroupColumns.First(c => c.Field.Name == Settings.FirstColumnName);
Log.Info(firstColumn.Data.GetType());
< /code>
Выходы: < /p>
System.Nullable1[System.Int64][]
Подробнее здесь: https://stackoverflow.com/questions/706 ... t-elements