• parquet-go的CSVWriter


    parquet-go的CSVWriter

    代码:

    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()
    
    }
    

    执行这段代码会报错:

    pw, err := writer.NewCSVWriter(md, fw, 4)
    

    报错如下:

    failed to create schema from tag map: type LIST: not a valid Type string
    

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

    具体报错在这里:

    if t, err := parquet.TypeFromString(info.Type); err == nil {
    	schema.Type = &t
    
    } else {
    		return nil, fmt.Errorf("type " + info.Type + ": " + err.Error())
    }
    

    进入parquet.TypeFromString()

    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。只支持如上一些类型。

  • 相关阅读:
    计算机艺术和动画之父肯·诺尔顿去世,享年91岁
    DES对称加解密
    自动控制原理7.6---离散系统的动态性能分析
    uniapp开发小程序中实现骨架屏
    L10.linux命令每日一练 -- 第二章 文件和目录操作命令 -- find和xargs命令
    PDAC复盘法是什么?怎么用?
    SV--线程(mailbox)
    【深入了解回调函数:在编程中的应用和原理】
    C# Onnx Yolov8 Detect 物体检测
    用好kafka,你不得不知的那些工具
  • 原文地址:https://blog.csdn.net/shulu/article/details/140372346