实例介绍
介绍
ParquetSharp是一个跨平台的.NET库,专门用于读写Apache Parquet文件。它以C#实现,并作为Apache Parquet C++的PInvoke封装,以确保高性能和兼容性。如果您需要与.NET DataFrames进行便捷集成,请查看ParquetSharp.DataFrame。
支持的平台:
- Linux
- Windows
- macOS
为什么使用Parquet?
Apache Parquet是一个开源的、列式数据文件格式,旨在实现数据的高效存储和检索。与CSV文件相比,Parquet在执行查询时速度可提升34倍,同时占用空间减少87%。
快速开始
以下示例展示了如何写入然后读取一个包含三个列的Parquet文件,这些列代表了对象-值对的时间序列。
var timestamps = new DateTime[] { /* ... */ };
var objectIds = new int[] { /* ... */ };
var values = new float[] { /* ... */ };
var columns = new Column[]
{
new Column<DateTime>("Timestamp"),
new Column<int>("ObjectId"),
new Column<float>("Value")
};
using var file = new ParquetFileWriter("float_timeseries.parquet", columns);
using var rowGroup = file.AppendRowGroup();
using (var timestampWriter = rowGroup.NextColumn().LogicalWriter<DateTime>())
{
timestampWriter.WriteBatch(timestamps);
}
using (var objectIdWriter = rowGroup.NextColumn().LogicalWriter<int>())
{
objectIdWriter.WriteBatch(objectIds);
}
using (var valueWriter = rowGroup.NextColumn().LogicalWriter<float>())
{
valueWriter.WriteBatch(values);
}
file.Close();
文档
更详细地了解如何使用ParquetSharp,请参阅以下文档:
- 写入Parquet文件
- 读取Parquet文件
- 处理嵌套数据
- 读写Arrow数据
- 行向API
- 自定义类型
- 写入TimeSpan数据
性能
通过运行ParquetSharp.Benchmark.csproj可以重现以下基准测试。与Parquet.NET 4.6.2相比,ParquetSharp 10.0.1在处理C# decimal类型的Decimal测试中读取速度快4倍,写入速度快3倍,在处理{int, DateTime, float}类型的三列的TimeSeries测试中,读取速度快2.8倍,写入速度快1.5倍。
已知限制
由于这个库是Parquet C++库的薄封装,错误使用可能导致原生内存访问违规。
【实例截图】
【核心代码】
文件清单
└── ParquetSharp-862568b3ffa48bc59205443535ac4cdb66b27c4c
├── build_unix.sh
├── build_windows.ps1
├── CMakeLists.txt
├── CODE_OF_CONDUCT.md
├── cpp
│ ├── AesKey.h
│ ├── arrow
│ │ ├── ArrowReaderProperties.cpp
│ │ ├── ArrowWriterPropertiesBuilder.cpp
│ │ ├── ArrowWriterProperties.cpp
│ │ ├── FileReader.cpp
│ │ └── FileWriter.cpp
│ ├── Buffer.cpp
│ ├── BufferOutputStream.cpp
│ ├── BufferReader.cpp
│ ├── CMakeLists.txt
│ ├── ColumnChunkMetaData.cpp
│ ├── ColumnCryptoMetaData.cpp
│ ├── ColumnDecryptionPropertiesBuilder.cpp
│ ├── ColumnDecryptionProperties.cpp
│ ├── ColumnDescriptor.cpp
│ ├── ColumnEncryptionPropertiesBuilder.cpp
│ ├── ColumnEncryptionProperties.cpp
│ ├── ColumnPath.cpp
│ ├── ColumnReader.cpp
│ ├── ColumnWriter.cpp
│ ├── CString.h
│ ├── Enums.cpp
│ ├── ExceptionInfo.cpp
│ ├── ExceptionInfo.h
│ ├── FileDecryptionPropertiesBuilder.cpp
│ ├── FileDecryptionProperties.cpp
│ ├── FileEncryptionPropertiesBuilder.cpp
│ ├── FileEncryptionProperties.cpp
│ ├── FileMetaData.cpp
│ ├── GroupNode.cpp
│ ├── KeyValueMetadata.cpp
│ ├── LogicalType.cpp
│ ├── ManagedAadPrefixVerifier.h
│ ├── ManagedDecryptionKeyRetriever.h
│ ├── ManagedOutputStream.cpp
│ ├── ManagedRandomAccessFile.cpp
│ ├── MemoryPool.cpp
│ ├── Node.cpp
│ ├── OutputStream.cpp
│ ├── ParquetFileReader.cpp
│ ├── ParquetFileWriter.cpp
│ ├── PrimitiveNode.cpp
│ ├── RandomAccessFile.cpp
│ ├── ReaderProperties.cpp
│ ├── ResizableBuffer.cpp
│ ├── RowGroupMetaData.cpp
│ ├── RowGroupReader.cpp
│ ├── RowGroupWriter.cpp
│ ├── SchemaDescriptor.cpp
│ ├── Statistics.cpp
│ ├── TypedColumnReader.cpp
│ ├── TypedColumnWriter.cpp
│ ├── TypedStatistics.cpp
│ ├── WriterPropertiesBuilder.cpp
│ └── WriterProperties.cpp
├── csharp
│ ├── AadPrefixVerifier.cs
│ ├── AesKey.cs
│ ├── ApplicationVersion.cs
│ ├── Arrow
│ │ ├── ArrowReaderProperties.cs
│ │ ├── ArrowWriterPropertiesBuilder.cs
│ │ ├── ArrowWriterProperties.cs
│ │ ├── FileReader.cs
│ │ └── FileWriter.cs
│ ├── BufferedReader.cs
│ ├── ByteArray.cs
│ ├── ByteArrayReaderCache.cs
│ ├── ByteBuffer.cs
│ ├── ColumnChunkMetaData.cs
│ ├── ColumnCryptoMetaData.cs
│ ├── Column.cs
│ ├── ColumnDecryptionPropertiesBuilder.cs
│ ├── ColumnDecryptionProperties.cs
│ ├── ColumnDescriptor.cs
│ ├── ColumnEncryptionPropertiesBuilder.cs
│ ├── ColumnEncryptionProperties.cs
│ ├── ColumnOrder.cs
│ ├── ColumnReader.cs
│ ├── ColumnWriter.cs
│ ├── Compression.cs
│ ├── Date.cs
│ ├── DateTimeNanos.cs
│ ├── Decimal128.cs
│ ├── DecryptionKeyRetriever.cs
│ ├── DefaultWriterProperties.cs
│ ├── Encoding.cs
│ ├── ExceptionInfo.cs
│ ├── FileDecryptionPropertiesBuilder.cs
│ ├── FileDecryptionProperties.cs
│ ├── FileEncryptionPropertiesBuilder.cs
│ ├── FileEncryptionProperties.cs
│ ├── FileMetaData.cs
│ ├── FixedLenByteArray.cs
│ ├── IColumnDescriptorVisitor.cs
│ ├── IColumnReaderVisitor.cs
│ ├── IColumnWriterVisitor.cs
│ ├── ILogicalColumnReaderVisitor.cs
│ ├── ILogicalColumnWriterVisitor.cs
│ ├── Int96.cs
│ ├── InternalsVisibleTo.cs
│ ├── IO
│ │ ├── Buffer.cs
│ │ ├── BufferOutputStream.cs
│ │ ├── BufferReader.cs
│ │ ├── ManagedOutputStream.cs
│ │ ├── ManagedRandomAccessFile.cs
│ │ ├── OutputStream.cs
│ │ ├── RandomAccessFile.cs
│ │ └── ResizableBuffer.cs
│ ├── KeyValueMetadata.cs
│ ├── LogicalBatchReader
│ │ ├── ArrayReader.cs
│ │ ├── DirectReader.cs
│ │ ├── ILogicalBatchReader.cs
│ │ ├── LeafReader.cs
│ │ ├── LogicalBatchReaderFactory.cs
│ │ ├── NestedReader.cs
│ │ ├── OptionalNestedReader.cs
│ │ ├── OptionalReader.cs
│ │ └── ScalarReader.cs
│ ├── LogicalBatchWriter
│ │ ├── ArrayWriter.cs
│ │ ├── ILogicalBatchWriter.cs
│ │ ├── LogicalBatchWriterFactory.cs
│ │ ├── NestedWriter.cs
│ │ ├── OptionalNestedWriter.cs
│ │ └── ScalarWriter.cs
│ ├── LogicalColumnReader.cs
│ ├── LogicalColumnStream.cs
│ ├── LogicalColumnWriter.cs
│ ├── LogicalReadConverterFactory.cs
│ ├── LogicalRead.cs
│ ├── LogicalStreamBuffers.cs
│ ├── LogicalType.cs
│ ├── LogicalTypeFactory.cs
│ ├── LogicalWriteConverterFactory.cs
│ ├── LogicalWrite.cs
│ ├── LongPath.cs
│ ├── MemoryPool.cs
│ ├── Nested.cs
│ ├── ParquetCipher.cs
│ ├── ParquetDll.cs
│ ├── ParquetException.cs
│ ├── ParquetFileReader.cs
│ ├── ParquetFileWriter.cs
│ ├── ParquetHandle.cs
│ ├── ParquetSharp.csproj
│ ├── ParquetSharp.targets
│ ├── ParquetVersion.cs
│ ├── PhysicalType.cs
│ ├── ReaderProperties.cs
│ ├── Repetition.cs
│ ├── RowGroupMetaData.cs
│ ├── RowGroupReader.cs
│ ├── RowGroupWriter.cs
│ ├── RowOriented
│ │ ├── MappedField.cs
│ │ ├── MapToColumnAttribute.cs
│ │ ├── ParquetDecimalScale.cs
│ │ ├── ParquetFile.cs
│ │ ├── ParquetRowReader.cs
│ │ └── ParquetRowWriter.cs
│ ├── Schema
│ │ ├── ColumnPath.cs
│ │ ├── ConvertedType.cs
│ │ ├── GroupNode.cs
│ │ ├── Node.cs
│ │ ├── NodeType.cs
│ │ ├── PrimitiveNode.cs
│ │ └── SchemaUtils.cs
│ ├── SchemaDescriptor.cs
│ ├── SortOrder.cs
│ ├── Statistics.cs
│ ├── StringUtil.cs
│ ├── TimeSpanNanos.cs
│ ├── TimeUnit.cs
│ ├── TypeUtils.cs
│ ├── WriterPropertiesBuilder.cs
│ └── WriterProperties.cs
├── csharp.benchmark
│ ├── Check.cs
│ ├── DecimalRead.cs
│ ├── DecimalWrite.cs
│ ├── FloatArrayTimeSeriesRead.cs
│ ├── FloatTimeSeriesBase.cs
│ ├── FloatTimeSeriesRead.cs
│ ├── FloatTimeSeriesWrite.cs
│ ├── NestedRead.cs
│ ├── NestedWrite.cs
│ ├── ParquetSharp.Benchmark.csproj
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ └── SizeInBytesColumn.cs
├── csharp.test
│ ├── Arrow
│ │ ├── TestArrowReaderProperties.cs
│ │ ├── TestArrowRoundTrip.cs
│ │ ├── TestArrowWriterProperties.cs
│ │ ├── TestFileReader.cs
│ │ ├── TestFileWriter.cs
│ │ └── TestTimeUnit.cs
│ ├── LogicalColumnReaderToArray.cs
│ ├── LogicalValueGetter.cs
│ ├── LogicalValueSetter.cs
│ ├── ParquetSharp.Test.csproj
│ ├── PhysicalValueGetter.cs
│ ├── PhysicalValueSetter.cs
│ ├── Program.cs
│ ├── Properties
│ │ └── launchSettings.json
│ ├── TestAadPrefixVerifier.cs
│ ├── TestAesKey.cs
│ ├── TestBuffer.cs
│ ├── TestByteArrayReaderCache.cs
│ ├── TestCaseGenericAttribute.cs
│ ├── TestColumn.cs
│ ├── TestColumnPath.cs
│ ├── TestColumnReader.cs
│ ├── TestColumnWriter.cs
│ ├── TestDate.cs
│ ├── TestDateTimeNanos.cs
│ ├── TestDecimal128.cs
│ ├── TestDecimal.cs
│ ├── TestDerivedKeyRetriever.cs
│ ├── TestEncryption.cs
│ ├── TestFiles
│ │ ├── generate_parquet.py
│ │ ├── map.parquet
│ │ └── nested.parquet
│ ├── TestKeyValueMetadata.cs
│ ├── TestLogicalColumnReader.cs
│ ├── TestLogicalColumnWriter.cs
│ ├── TestLogicalTypeFactory.cs
│ ├── TestLogicalTypeRoundtrip.cs
│ ├── TestManagedRandomAccessFile.cs
│ ├── TestMaps.cs
│ ├── TestMemoryLeaks.cs
│ ├── TestMemoryPool.cs
│ ├── TestNestedReads.cs
│ ├── TestNode.cs
│ ├── TestParquetFileReader.cs
│ ├── TestParquetFileWriter.cs
│ ├── TestPhysicalTypeRoundtrip.cs
│ ├── TestReaderProperties.cs
│ ├── TestRowOrientedParquetFile.cs
│ └── TestWriterProperties.cs
├── docs
│ ├── Arrow.md
│ ├── Nested.md
│ ├── PowerShell.md
│ ├── Reading.md
│ ├── RowOriented.md
│ ├── TimeSpan.md
│ ├── TypeFactories.md
│ └── Writing.md
├── fsharp.test
│ ├── ParquetSharp.Test.FSharp.fsproj
│ └── TestRowOrientedApi.fs
├── global.json
├── LICENSE.txt
├── logo
│ ├── 1x
│ │ ├── ParquetSharp_IconLogo_RGB-Black.png
│ │ ├── ParquetSharp_IconLogo_RGB-Color.png
│ │ └── ParquetSharp_IconLogo_RGB-White.png
│ ├── ai
│ │ ├── ParquetSharp_IconLogo_RGB.ai
│ │ └── ParquetSharp_SignatureLogo_RGB.ai
│ ├── png
│ │ ├── ParquetSharp_IconLogo_RGB-Black.png
│ │ ├── ParquetSharp_IconLogo_RGB-Color.png
│ │ ├── ParquetSharp_IconLogo_RGB-White.png
│ │ ├── ParquetSharp_SignatureLogo_RGB-Black.png
│ │ ├── ParquetSharp_SignatureLogo_RGB-Color.png
│ │ └── ParquetSharp_SignatureLogo_RGB-White.png
│ └── svg
│ ├── ParquetSharp_IconLogo_RGB-Black.svg
│ ├── ParquetSharp_IconLogo_RGB-Color.svg
│ ├── ParquetSharp_IconLogo_RGB-White.svg
│ ├── ParquetSharp_SignatureLogo_RGB-Black.svg
│ ├── ParquetSharp_SignatureLogo_RGB-Color.svg
│ └── ParquetSharp_SignatureLogo_RGB-White.svg
├── MAINTAINERS.md
├── ParquetSharp.DotSettings
├── README.md
└── vcpkg.json
23 directories, 272 files
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论