Maison >développement back-end >Golang >Convertir le fichier parquet en structure Golang avec des éléments imbriqués

Convertir le fichier parquet en structure Golang avec des éléments imbriqués

王林
王林avant
2024-02-10 19:10:08788parcourir

将 parquet 文件转换为带有嵌套元素的 Golang 结构

L'éditeur PHP Xinyi présentera comment convertir des fichiers parquet en structures Golang avec des éléments imbriqués. Parquet est un format de stockage en colonnes efficace et Golang est un langage de programmation puissant. Leur combinaison peut nous aider à mieux traiter et analyser de grandes quantités de données. En utilisant des bibliothèques et des techniques appropriées, nous pouvons facilement analyser les fichiers parquet dans des structures Golang et gérer les éléments imbriqués pour une meilleure organisation et manipulation des données. Cet article présentera en détail les étapes de mise en œuvre et les précautions pour aider les lecteurs à démarrer facilement.

Contenu de la question

J'essaie de lire un fichier parquet avec des tableaux/structures imbriquées en go en utilisant la bibliothèque xitongsys/parquet-go. Les données de la liste ne sont pas lues et aucune valeur n'est vue. Ci-dessous ma structure en golang

type Play struct {
    SID            string   `parquet:"name=si, type=BYTE_ARRAY, convertedtype=UTF8, encoding=PLAIN_DICTIONARY, repetitiontype=OPTIONAL" json:"si,omitempty"`
    TimeStamp      int      `parquet:"name=ts, type=INT64, repetitiontype=OPTIONAL" json:"ts,omitempty"`
    SingleID       int      `parquet:"name=sg, type=INT64, repetitiontype=OPTIONAL" json:"sg,omitempty"`
    PID            int      `parquet:"name=playid, type=INT64, repetitiontype=OPTIONAL" json:"playid,omitempty"`
    StartTimeStamp string   `parquet:"name=startts, type=BYTE_ARRAY,repetitiontype=OPTIONAL"`
    Price          []Price1 `parquet:"name=price, type=LIST, repetitiontype=REQUIRED" json:"price,omitempty"`
}

type Price1 struct {
    CurrID int    `parquet:"name=currId, type=INT64, repetitiontype=REQUIRED" json:"currId,omitempty"`
    LPTag  string `parquet:"name=lptag, type=BYTE_ARRAY,convertedtype=UTF8, repetitiontype=REQUIRED" json:"lptag,omitempty"`
    LPrice Money  `parquet:"name=lpmoney, type=STRUCT" json:"lpmoney,omitempty"`
}

type Money struct {
    AdmCurrCode  string `parquet:"name=admCC, type=BYTE_ARRAY, repetitiontype=OPTIONAL" json:"admCC,omitempty"`
    AdmCurrValue string `parquet:"name=admCV, type=BYTE_ARRAY" json:"admCV,omitempty"`
}

currid et lptag sont vides même si le fichier parquet a des valeurs valides

Solution

J'ai trouvé le package github.com/segmentio/parquet-go包可以正确读取文件。您需要坚持使用 github.com/xitongsys/parquet-go ?

package main

import (
    "fmt"

    "github.com/segmentio/parquet-go"
)

type Play struct {
    SID            string  `parquet:"si"`
    TimeStamp      int     `parquet:"ts"`
    SingleID       int     `parquet:"sg"`
    PID            int     `parquet:"playid"`
    StartTimeStamp string  `parquet:"startts"`
    Price          []Price `parquet:"price,list"`
}

type Price struct {
    CurrID int    `parquet:"currId"`
    LPTag  string `parquet:"lptag"`
    LPrice Money  `parquet:"lpmoney"`
}

type Money struct {
    AdmCurrCode  string `parquet:"admCC"`
    AdmCurrValue string `parquet:"admCV"`
}

func main() {
    rows, err := parquet.ReadFile[Play]("s3.parquet")
    if err != nil {
        panic(err)
    }

    for _, c := range rows {
        fmt.Printf("%+v\n", c)
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer