parquet-go的CSVWriter

parquet-go的CSVWriter

代码:

go 复制代码
package main

import (
	"github.com/xitongsys/parquet-go-source/local"
	"github.com/xitongsys/parquet-go/writer"
	"log"
)

func main() {
	var err error
	md := []string{
		"name=Name, type=BYTE_ARRAY, convertedtype=UTF8, encoding=PLAIN",
		"name=address, type=LIST, valuetype=BYTE_ARRAY, valueconvertedtype=UTF8",
	}

	//write
	fw, err := local.NewLocalFileWriter("csv.parquet")
	if err != nil {
		log.Println("Can't open file", err)
		return
	}
	pw, err := writer.NewCSVWriter(md, fw, 4)
	if err != nil {
		log.Println("Can't create csv writer", err)
		return
	}

	num := 10
	for i := 0; i < num; i++ {
		data2 := []interface{}{
			"Student Name",
			[]string{"string1", "string2", "string3"},
		}
		if err = pw.Write(data2); err != nil {
			log.Println("Write error", err)
		}

	}
	if err = pw.WriteStop(); err != nil {
		log.Println("WriteStop error", err)
	}
	log.Println("Write Finished")
	fw.Close()

}

执行这段代码会报错:

go 复制代码
pw, err := writer.NewCSVWriter(md, fw, 4)

报错如下:

shell 复制代码
failed to create schema from tag map: type LIST: not a valid Type string

分析原因后是CSVWriter不支持LIST。

具体报错在这里:

go 复制代码
if t, err := parquet.TypeFromString(info.Type); err == nil {
	schema.Type = &t

} else {
		return nil, fmt.Errorf("type " + info.Type + ": " + err.Error())
}

进入parquet.TypeFromString()

go 复制代码
func TypeFromString(s string) (Type, error) {
	switch s {
	case "BOOLEAN":
		return Type_BOOLEAN, nil
	case "INT32":
		return Type_INT32, nil
	case "INT64":
		return Type_INT64, nil
	case "INT96":
		return Type_INT96, nil
	case "FLOAT":
		return Type_FLOAT, nil
	case "DOUBLE":
		return Type_DOUBLE, nil
	case "BYTE_ARRAY":
		return Type_BYTE_ARRAY, nil
	case "FIXED_LEN_BYTE_ARRAY":
		return Type_FIXED_LEN_BYTE_ARRAY, nil
	}
	return Type(0), fmt.Errorf("not a valid Type string")
}

可以看到这里并没有LIST,也没有MAP。只支持如上一些类型。

相关推荐
geovindu9 分钟前
CSharp: State Pattern
开发语言·后端·c#·.net·状态模式·行为模式
山岚的运维笔记12 分钟前
mysql 专业笔记 -- 第 1 章:MySQL 入门
运维·数据库·笔记·后端·学习·mysql·dba
IT小白杨13 分钟前
TikTok小店防封号浏览器实战:2026年多店铺环境隔离与账号安全运营技术解析
开发语言·数据库·安全·php·chrome devtools·指纹浏览器
2601_9669496519 分钟前
Python 量化开发为什么适合使用金融数据 SDK?从数据获取到策略研究的工程化实践
开发语言·python·数据分析·量化交易·股票数据·quantdash
万年咸鱼20 分钟前
Java ArrayList 详解:原理、用法与实战
java·开发语言·windows
长友cy25 分钟前
Qt官方示例Application源码阅读
开发语言·qt
程序员良辰32 分钟前
服务器 JDK 环境变量配置:一键安装和手动配置有什么区别?
开发语言·python
fliter34 分钟前
我们如何通过优化 1.1.1.1 的 DNS 缓存节省 100 TB 内存
后端
奈斯先生Vector39 分钟前
本地图片识别怎么接入多模态 AI?用 Python API 理解 GPT-4o Vision 的真实工作流
开发语言·人工智能·windows·python·网络协议·http·aigc
一开43 分钟前
一个自己开发的 Agent Harness-子 Agent篇
后端