亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

用 Python 定義 Schema 并生成 Parquet 文件詳情

 更新時間:2021年09月25日 10:19:40   作者:Yanbin Blog  
本文將演示兩個例子,一個是沒有層級的兩個字段,另一個是含于嵌套級別的字段,將要使用到的 Python 模塊有 pandas 和 pyarrow,感興趣是我小伙伴請和小編一起學(xué)習(xí)下面文章內(nèi)容吧

Java Python 實現(xiàn) Avro 轉(zhuǎn)換成 Parquet 格式, chema 都是在 Avro 中定義的。這里要嘗試的是如何定義 Parquet Schema, 然后據(jù)此填充數(shù)據(jù)并生成 Parquet 文件。

一、簡單字段定義

1、定義 Schema 并生成 Parquet 文件

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 定義 Schema
schema = pa.schema([
    ('id', pa.int32()),
    ('email', pa.string())
])

# 準(zhǔn)備數(shù)據(jù)
ids = pa.array([1, 2], type = pa.int32())
emails = pa.array(['first@example.com', 'second@example.com'], pa.string())

# 生成 Parquet 數(shù)據(jù)
batch = pa.RecordBatch.from_arrays(
    [ids, emails],
    schema = schema
)
table = pa.Table.from_batches([batch])

# 寫 Parquet 文件 plain.parquet
pq.write_table(table, 'plain.parquet')
import pandas as pd

import pyarrow as pa

import pyarrow . parquet as pq

# 定義 Schema

schema = pa . schema ( [

     ( 'id' , pa . int32 ( ) ) ,

     ( 'email' , pa . string ( ) )

] )

# 準(zhǔn)備數(shù)據(jù)

ids = pa . array ( [ 1 , 2 ] , type = pa . int32 ( ) )

emails = pa . array ( [ 'first@example.com' , 'second@example.com' ] , pa . string ( ) )

# 生成 Parquet 數(shù)據(jù)

batch = pa . RecordBatch . from_arrays (

     [ ids , emails ] ,

     schema = schema

)

table = pa . Table . from_batches ( [ batch ] )

# 寫 Parquet 文件 plain.parquet

pq . write_table ( table , 'plain.parquet' )

2、驗證 Parquet 數(shù)據(jù)文件

我們可以用工具 parquet-tools 來查看 plain.parquet 文件的數(shù)據(jù)和 Schema

 $ parquet-tools schema plain.parquet  message schema {      optional int32 id;      optional binary email (STRING);  }  $ parquet-tools cat --json plain.parquet  {"id":1,"email":"first@example.com"}  {"id":2,"email":"second@example.com"} 


沒問題,與我們期望的一致。也可以用 pyarrow 代碼來獲取其中的 Schema 和數(shù)據(jù)

schema = pq.read_schema('plain.parquet')
print(schema)

df = pd.read_parquet('plain.parquet')
print(df.to_json())
schema = pq . read_schema ( 'plain.parquet' )

print ( schema )

df = pd . read_parquet ( 'plain.parquet' )

print ( df . to_json ( ) )

輸出為:

schema = pq.read_schema('plain.parquet')
print(schema)

df = pd.read_parquet('plain.parquet')
print(df.to_json())
schema = pq . read_schema ( 'plain.parquet' )

print ( schema )

df = pd . read_parquet ( 'plain.parquet' )

print ( df . to_json ( ) )

二、含嵌套字段定義

下面的 Schema 定義加入一個嵌套對象,在 address 下分 email_address post_addressSchema 定義及生成 Parquet 文件的代碼如下

import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

# 內(nèi)部字段
address_fields = [
    ('email_address', pa.string()),
    ('post_address', pa.string()),
]

# 定義 Parquet Schema,address 嵌套了 address_fields
schema = pa.schema(j)

# 準(zhǔn)備數(shù)據(jù)
ids = pa.array([1, 2], type = pa.int32())
addresses = pa.array(
    [('first@example.com', 'city1'), ('second@example.com', 'city2')],
    pa.struct(address_fields)
)

# 生成 Parquet 數(shù)據(jù)
batch = pa.RecordBatch.from_arrays(
    [ids, addresses],
    schema = schema
)
table = pa.Table.from_batches([batch])

# 寫 Parquet 數(shù)據(jù)到文件
pq.write_table(table, 'nested.parquet')
import pandas as pd

import pyarrow as pa

import pyarrow . parquet as pq

# 內(nèi)部字段

address_fields = [

     ( 'email_address' , pa . string ( ) ) ,

     ( 'post_address' , pa . string ( ) ) ,

]

# 定義 Parquet Schema,address 嵌套了 address_fields

schema = pa . schema ( j )

# 準(zhǔn)備數(shù)據(jù)

ids = pa . array ( [ 1 , 2 ] , type = pa . int32 ( ) )

addresses = pa . array (

     [ ( 'first@example.com' , 'city1' ) , ( 'second@example.com' , 'city2' ) ] ,

     pa . struct ( address_fields )

)

# 生成 Parquet 數(shù)據(jù)

batch = pa . RecordBatch . from_arrays (

     [ ids , addresses ] ,

     schema = schema

)

table = pa . Table . from_batches ( [ batch ] )

# 寫 Parquet 數(shù)據(jù)到文件

pq . write_table ( table , 'nested.parquet' )

1、驗證 Parquet 數(shù)據(jù)文件

同樣用 parquet-tools 來查看下 nested.parquet 文件

 $ parquet-tools schema nested.parquet  message schema {      optional int32 id;      optional group address {          optional binary email_address (STRING);          optional binary post_address (STRING);      }  }  $ parquet-tools cat --json nested.parquet  {"id":1,"address":{"email_address":"first@example.com","post_address":"city1"}}  {"id":2,"address":{"email_address":"second@example.com","post_address":"city2"}} 


parquet-tools 看到的 Schama 并沒有 struct 的字樣,但體現(xiàn)了它 address 與下級屬性的嵌套關(guān)系。

pyarrow 代碼來讀取 nested.parquet 文件的 Schema 和數(shù)據(jù)是什么樣子

schema = pq.read_schema("nested.parquet")
print(schema)

df = pd.read_parquet('nested.parquet')
print(df.to_json())
schema = pq . read_schema ( "nested.parquet" )

print ( schema )

df = pd . read_parquet ( 'nested.parquet' )

print ( df . to_json ( ) )

輸出:

id: int32
  -- field metadata --
  PARQUET:field_id: '1'
address: struct<email_address: string, post_address: string>
  child 0, email_address: string
    -- field metadata --
    PARQUET:field_id: '3'
  child 1, post_address: string
    -- field metadata --
    PARQUET:field_id: '4'
  -- field metadata --
  PARQUET:field_id: '2'
{"id":{"0":1,"1":2},"address":{"0":{"email_address":"first@example.com","post_address":"city1"},"1":{"email_address":"second@example.com","post_address":"city2"}}}
id : int32

   -- field metadata --

   PARQUET : field_id : '1'

address : struct & lt ; email_address : string , post_address : string & gt ;

   child 0 , email_address : string

     -- field metadata --

     PARQUET : field_id : '3'

   child 1 , post_address : string

     -- field metadata --

     PARQUET : field_id : '4'

   -- field metadata --

   PARQUET : field_id : '2'

{ "id" : { "0" : 1 , "1" : 2 } , "address" : { "0" : { "email_address" : "first@example.com" , "post_address" : "city1" } , "1" : { "email_address" : "second@example.com" , "post_address" : "city2" } } }

數(shù)據(jù)當(dāng)然是一樣的,有略微不同的是顯示的 Schema 中, address 標(biāo)識為 struct<email_address: string, post_address: string> , 明確的表明它是一個 struct 類型,而不是只展示嵌套層次。

到此這篇關(guān)于用 Python 定義 Schema 并生成 Parquet 文件詳情的文章就介紹到這了,更多相關(guān)用 Python 定義 Schema 并生成 Parquet 文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python中執(zhí)行分位數(shù)回歸的示例詳解

    Python中執(zhí)行分位數(shù)回歸的示例詳解

    分位數(shù)回歸是線性回歸的擴展版本,分位數(shù)回歸構(gòu)建一組變量(也稱為自變量)和分位數(shù)(也稱為因變量)之間的關(guān)系,下面我們就來看看Python如何執(zhí)行分位數(shù)回歸吧
    2024-03-03
  • python實現(xiàn)三階魔方還原的示例代碼

    python實現(xiàn)三階魔方還原的示例代碼

    這篇文章主要介紹了python實現(xiàn)三階魔方還原的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • python發(fā)送arp欺騙攻擊代碼分析

    python發(fā)送arp欺騙攻擊代碼分析

    這篇文章主要介紹了python發(fā)送arp欺騙攻擊的方法,大家碰到這樣的事情可以預(yù)防一下
    2014-01-01
  • python字典鍵值對的添加和遍歷方法

    python字典鍵值對的添加和遍歷方法

    下面小編就為大家?guī)硪黄猵ython字典鍵值對的添加和遍歷方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-09-09
  • 將 Ubuntu 16 和 18 上的 python 升級到最新 python3.8 的方法教程

    將 Ubuntu 16 和 18 上的 python 升級到最新 python3.8 的方法教程

    這篇文章主要介紹了如何將 Ubuntu 16 和 18 上的 python 升級到最新 3.8 版,本文通過實例代碼相結(jié)合給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • Python使用pyecharts繪制世界地圖,省級地圖,城市地圖實例詳解

    Python使用pyecharts繪制世界地圖,省級地圖,城市地圖實例詳解

    這篇文章主要介紹了如何使用Python中的pyecharts庫繪制世界地圖、中國地圖、省級地圖、市級地圖,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起動手試一試
    2022-02-02
  • python獲取外網(wǎng)ip地址的方法總結(jié)

    python獲取外網(wǎng)ip地址的方法總結(jié)

    這篇文章主要介紹了python獲取外網(wǎng)ip地址的方法,實例總結(jié)了四種常用的獲取外網(wǎng)IP地址的技巧,需要的朋友可以參考下
    2015-07-07
  • python實現(xiàn)微秒級等待問題(windows)

    python實現(xiàn)微秒級等待問題(windows)

    這篇文章主要介紹了python實現(xiàn)微秒級等待問題(windows),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-06-06
  • Python變量基礎(chǔ)知識

    Python變量基礎(chǔ)知識

    這篇文章主要介紹Python變量的基礎(chǔ)知識,圍繞Python變量相關(guān)知識點展開,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-10-10
  • Python Merge函數(shù)原理及用法解析

    Python Merge函數(shù)原理及用法解析

    這篇文章主要介紹了Python Merge函數(shù)原理及用法解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09

最新評論