Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tukar fail parket kepada struktur Golang dengan elemen bersarang

Tukar fail parket kepada struktur Golang dengan elemen bersarang

王林
王林ke hadapan
2024-02-10 19:10:08764semak imbas

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

Editor PHP Xinyi akan memperkenalkan cara menukar fail parket kepada struktur Golang dengan elemen bersarang. Parket ialah format storan lajur yang cekap, dan Golang ialah bahasa pengaturcaraan yang berkuasa Menggabungkannya boleh membantu kami memproses dan menganalisis sejumlah besar data. Dengan menggunakan perpustakaan dan teknik yang sesuai, kami boleh menghuraikan fail parket dengan mudah ke dalam struktur Golang dan boleh mengendalikan elemen bersarang untuk organisasi dan manipulasi data yang lebih baik. Artikel ini akan memperkenalkan langkah pelaksanaan dan langkah berjaga-jaga secara terperinci untuk membantu pembaca bermula dengan mudah.

Kandungan soalan

Saya cuba membaca fail parket dengan tatasusunan/struktur bersarang dalam go menggunakan perpustakaan xitongsys/parket-go. Data senarai tidak dibaca dan tiada nilai dilihat. Di bawah adalah struktur saya di 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 dan lptag kosong walaupun fail parket mempunyai nilai yang sah

Penyelesaian

Saya jumpa pakej 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)
    }
}

Atas ialah kandungan terperinci Tukar fail parket kepada struktur Golang dengan elemen bersarang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam